GOF23种设计模式

设计原则:

1. 单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因

2. 开放-封闭原则(OCP):软件实体(类、模块、函数等)应该可以扩展,但是不可修改。即对于扩展是开放的, 对于修改是封闭的。

3. 依赖倒转原则: A. 高层模块不应该依赖低层模块,两个都应该依赖抽象。B.抽象不应该依赖细节,细节应该依赖抽象。说白了,就是要针对接口编程,不要对实现编程。

4. 迪米特法则(LoD):如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用。如果其中一个类需要调用另一个类的某个方法的话,可以通过第三者转发这个调用。基本思想是强调类之间的松耦合。

23种设计模式
1.创建型模式:
(1).工厂方法模式
(2).抽象工厂模式
(3).建造者模式
(4).原型模式
(5).单例模式
2.结构型模式:
(6).适配器模式
(7).桥模式
(8).组合模式
(9).装饰模式
(10).外观模式
(11).享元模式
(12).代理模式
3.行为型模式
(13).解释器模式
(14).模板方法模式
(15).职责链模式
(16).命令模式
(17).迭代器模式
(18).中介者模式
(19).备忘录模式
(20).观察者模式
(21).状态模式
(22).策略模式
(23).访问者模式

Android中的常见设计模式

1. 组合模式

View和ViewGroup。组合模式使得用户对单个对象View和组合对象ViewGroup的使用具有一致性。可以简化客户代码。基本对象和组合对象有一致性,用户不用区分它们。

2. 模板方法模式

定义一个操作中的算法的骨架,而将一些算法的步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

如View中draw方法, onDraw(), dispatchDraw()都定义为抽象方法,自定义View的话,一般重写onDraw,dispatchDraw方法即可

    if (!verticalEdges && !horizontalEdges) {
            // Step 3, draw the content
            if (!dirtyOpaque) onDraw(canvas);

// Step 4, draw the children
            dispatchDraw(canvas);

// Step 6, draw decorations (scrollbars)
            onDrawScrollBars(canvas);

// we're done...
            return;
        }

3. 观察者模式

Listener都相当于一个观察者,对一些事件的响应都进行观察,当发现有事件发生就进行相应的处理

4. 单例模式

Application类

5. 适配器模式

在 android 中常见的适配器类有: BaseAdapter 、SimpleAdapter 等

6. 工厂模式

Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.ic_action_search)

BitmapFactory顾名思义,就是位图工厂,专门用来将指定的图片转化为指定的位图Bitmap。因为图片来源的不同可能导致图片大小,格式类型等的多种多样,这样就导致了生成目标对象的复杂度,因此通过工厂统一的加工成同样大小,类型的”标准件“,大大简化了代码的复杂度与工作量。

7. 代理模式

Android系统中利用AIDL定义一种远程服务时就需要用到代理模式。

8. 享元模式

9. 建造者模式Builder

如Uri.Builder,AlertDialog.Builder. Builder通过setTitle(),setMessage(),setIcon()等方法在create()中构造出一个AlertDialog对象。
然后客户可以把AlertDialog对象show出去。

10. 策略模式

定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。

android.animation.Interpolator  Animation不同动画的实现,主要是依靠Interpolator的不同实现而变。

[Android]GOF23种设计模式 & Android中的设计模式的更多相关文章

  1. [设计模式]JDK中的设计模式

    转载自:http://blog.csdn.net/gtuu0123/article/details/6114197 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图. 首先来个总结,具体 ...

  2. [Head First设计模式]餐馆中的设计模式——命令模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  3. GoF23种(部分)软件设计模式【核心理解】

    设计模式复习 1. 面向对象设计原则 1.1 可维护性较低的软件设计 过于僵硬 过于脆弱 复用率低 黏度过高 1.2 一个好的系统设计 可扩展性 灵活性 可插入性 复用:一个软件的组成部分可以在同一个 ...

  4. 访何红辉:谈谈Android源码中的设计模式

    最近Android 6.0版本的源代码开放下载,刚好分析Android源码的技术书籍<Android源码设计模式解析与实战>上市,我们邀请到它的作者何红辉,来谈谈Android源码中的设计 ...

  5. [转] Android中的设计模式-备忘录模式

    转自Android中的设计模式-备忘录模式 定义 备忘录设计模式的定义就是把对象的状态记录和管理委托给外界处理,用以维持自己的封闭性. 比较官方的定义 备忘录模式(Memento Pattern)又叫 ...

  6. GOF23种设计模式概括

    GOF23种设计模式分为三种: 创建型模式[工厂方法模式]结构型模式[(类)适配器模式]行为型模式[ 解释器模式,模板方法模式]   创建型模式Creational Patterns抽象工厂模式abs ...

  7. [Android设计模式]Android退出应用程序终极方法

    如何干净彻底地退出Android应用程序,是很多开发者的心头痒.如何干净地关闭所有已打开的Activity? 如何关闭指定的Activity? 如何关闭一类Activity? 这里,我们提出一种通过实 ...

  8. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  9. Java并发编程中的设计模式解析(二)一个单例的七种写法

    Java单例模式是最常见的设计模式之一,广泛应用于各种框架.中间件和应用开发中.单例模式实现起来比较简单,基本是每个Java工程师都能信手拈来的,本文将结合多线程.类的加载等知识,系统地介绍一下单例模 ...

随机推荐

  1. FineUI v3.3.2发布!目前最稳定版本,五年陈酿!

    关于FineUI基于 ExtJS 的专业 ASP.NET 控件库. FineUI的使命创建 No JavaScript,No CSS,No UpdatePanel,No ViewState,No We ...

  2. Theano3.4-练习之多层感知机

    来自http://deeplearning.net/tutorial/mlp.html#mlp Multilayer Perceptron note:这部分假设读者已经通读之前的一个练习 Classi ...

  3. background-position 50% 50%是如何计算的

    background-position:value1 value2 value1和value2的值可以值绝对值也可以是百分数,大部分值都很好理解,但是50% 50%这两个值是如何计算的呢? 图片水平和 ...

  4. CSS3属性border-radius绘制多种多样的图形

    border-radius,国内翻译成圆角,你可能以为这个属性就是用来画圆角,没错,但是除此之外,它还可以做点别的事情.radius其实指的是边框所在圆的半径,这个CSS3属性不仅能够创建圆角,还可以 ...

  5. centos 7 安装mysql

    # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -ivh mysql-community- ...

  6. Hibernate之Annotation(注解的方式,非映射)

    在hibernate 3.0之后,可以建立一个符合JPA标准的Annotation,以hibernate3.3.2GA为例 Annotation 以 hibernate Annotation 3.3. ...

  7. JS 获取上一层目录

    派生到我的代码片 <script type="text/javascript"> //返回当前工作目录 function GetCurrDir(){ var pathN ...

  8. 12-rm 命令总结

    rm remove files or directories 删除目录或文件 [语法]: rm [选项] [参数] [功能介绍] rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其 ...

  9. 北大OJ 1001题

    题目:输入一序列的正实数和幂次(正整数)对,然后打印结果(具体的比这个精细) 这道题是关于大数计算的(大数求幂),从开始建立思路,到写代码.调式到最后被AC以及最终的优化,总共用了差不多一天的时间.开 ...

  10. 1027mysqlbinlog工具日志恢复

    -- 转自http://bbs.csdn.net/topics/310068149-- 其实就是找到对应的位置然后执行语句即可 -- 第一部分 输出mysqlbinlog "C:\Progr ...