android学习日记28--Android中经常使用设计模式总结

1、综述
  设计模式,根据前人经验总结出常见软件工程问题的解决思想套路。GoF一共概括了23种设计模式,固然还有人扩充,不止这些。
设计模式主要利用面向对象语言的特性,而android 的设计主要用JAVA语言,有不少地方用到设计模式。android

 

2、设计原则
  设计模式是遵循面向对象设计的五个设计原则来设计的,以下:
1.单一职责原则(SRP)--一个类只能有一个职责,多个职责耦合在一块儿,会影响复用性。
2.开放封闭原则(OCP)--对扩展是开放的,而对修改是封闭的
3.Liskov替换原则(LSP)--继承必须确保超类所拥有的性质在子类中仍然成立
4.依赖倒置原则(DIP)--高层次的模块不该该依赖于低层次的模块,他们都应该依赖于抽象;抽象不该该依赖于具体,具体应该依赖于抽象。
5.接口隔离原则(ISP)--使用多个专门的接口比使用单一的总接口要好。算法

 

3、常见设计模式
一、单例模式
  最简单的设计模式,避免在内存中频繁的实例化因此将它的对象写成static 静态 这样它的对象就只有一份存在静态内存区使用的时候只需要经过
getInstance()就能够直接拿到这个静态对象。经常使用到的好比数据库管理类DatabaseHelper和输入法管理类InputMethodManager。数据库

 1 //饿汉式
 2 class Singleton {
 3 private static Singleton instance=new Singleton();
 4 private Singleton(){}
 5     static Singleton getInstance() {
 6         return instance;
 7     }
 8 }
 9 
10 //懒汉式
11 class Singleton {
12 private static Singleton instance=null;
13 private Singleton(){}
14 static Singleton getInstance() {
15     if(instance==null)
16         instance=new Singleton();
17     return instance;
18 }
19 }    

  饿汉式是线程安全的,懒汉式是线程不安全的,若是要考虑线程,能够同步代码块也能够同步方法,同步代码块是最好的方法canvas

 

二、模板方法设计模式

  经过把不变的的行为搬移到超类,去除子类中重复的代码来体现它的优点;当不变的和可变的行为在子类实现中混合在一块儿的时候,
不变的行为就会在子类中重复实现,咱们经过模板方法模式把这些行为搬移到单一的地方,这样就能够帮助子类摆脱重复不变行为的纠缠。经常使用到的好比View的Draw方法。安全

若是咱们自定义View的话,咱们通常也是重写onDraw方法便可。ide

 1 public class View{
 2 /**
 3 * 钩子操做,空实现
 4 */
 5 protected void onDraw(Canvas canvas) {
 6 }
 7 
 8 /**
 9 *钩子操做,空实现
10 */
11 protected void dispatchDraw(Canvas canvas) {
12 }
13 
14 //算法骨架
15 public void draw(Canvas canvas) {
16 if (!verticalEdges && !horizontalEdges) {
17 // 步骤1
18 if (!dirtyOpaque) onDraw(canvas);
19 
20 // 步骤2
21 dispatchDraw(canvas);
22 
23 // 步骤3
24 onDrawScrollBars(canvas);
25 
26 return;
27     }
28 }
29 //... ...
30 }
31 
32 public class TextView{
33 @Override
34 protected void onDraw(Canvas canvas) {
35 //大量自定义实现代码
36     }
37 } 

 

三、建造者模式
  将一个复杂对象的构造与它的表示分离,使一样的构建过程能够建立不一样的表示,这样的设计模式被称为建造者模式。
上文讲到Dialog主要用到建造者模式。AlertDialog.Builder就是具体建造者,另外,它是以匿名类的方式被建立的,并且,
Builder类是AlertDialog的内部类,这样,耦合性比较低,这正是面向对象中要达到的设计意图之一。 最后调用show函数,
它的返回类型正是咱们要建立的产品,即AlertDialog。 因此,Builder(具体建造者)是AlertDialog(产品)的内部匿名类,用来建立并显示一个dialog。函数

 

四、适配器模式
  把一个类的接口变换成客户端所期待的另外一种接口,从而使本来不匹配而没法在一块儿工做的两个,类可以在一块儿工做。
适配器模式分为类适配器模式和对象适配器模式。ListView用于显示列表数据,可是做为列表数据集合有不少形式,
有Array,有Cursor,咱们须要对应的适配器做为桥梁,处理相应的数据(并能造成ListView所须要的视图)ui

 

五、观察者模式
  定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,全部依赖于它的对象都获得通知并被自动更新。
在ListView中Adapter中favoritesAdapter.registerDataSetObserver(mDataSetObserver);;数据改变以后会自动调用。spa

 

六、and so on

相关文章
相关标签/搜索