zoukankan      html  css  js  c++  java
  • android学习日记28--Android中常用设计模式总结

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

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

    三、常见设计模式
    1、单例模式
      最简单的设计模式,避免在内存中频繁的实例化所以将它的对象写成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 }    

      饿汉式是线程安全的,懒汉式是线程不安全的,如果要考虑线程,可以同步代码块也可以同步方法,同步代码块是最好的方法

    2、模板方法

      通过把不变的的行为搬移到超类,去除子类中重复的代码来体现它的优势;当不变的和可变的行为在子类实现中混合在一起的时候,
    不变的行为就会在子类中重复实现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就可以帮助子类摆脱重复不变行为的纠缠。常用到的比如View的Draw方法。

    如果我们自定义View的话,我们一般也是重写onDraw方法即可。

     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 } 

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

    4、适配器模式
      把一个类的接口变换成客户端所期待的另一种接口,从而使原本不匹配而无法在一起工作的两个,类能够在一起工作。
    适配器模式分为类适配器模式和对象适配器模式。ListView用于显示列表数据,但是作为列表数据集合有很多形式,
    有Array,有Cursor,我们需要对应的适配器作为桥梁,处理相应的数据(并能形成ListView所需要的视图)

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

    6、and so on

  • 相关阅读:
    第二周 历年学生作品评论
    第二周 WBS、NABCD查阅
    第二周 SCRUM站立会议
    第二周 燃尽图
    第二周 对读构建之法后提出的五个问题
    补上一周的进度条
    词频统计
    每周进度及工作量统计——第三周
    第三周 四人小组
    词频统计 效能分析
  • 原文地址:https://www.cnblogs.com/aiguozhe/p/3692991.html
Copyright © 2011-2022 走看看