设计模式 概览

本文章不讨论各个设计模式细节,而只是自己在读24种设计模式时的笔记。估计会有很多地方艰涩难懂,见谅。

一、策略模式
  关键点: 赵云的main()、 锦囊 、妙计

    主体赵云 new 一个特定妙计的锦囊对象,用锦囊对象operate()执行妙计。

  重点就是,妙计对象是锦囊对象的成员函数。kit.operate()实际内部是用strategy.operate()。//执行接口想同

  优势:高内聚低耦合,策略可以无限扩展,而锦囊却不需要变动。

 

二、代理模式

  关键点:西门庆(嫖客)main()、王婆(老鸨)、潘金莲(妓女)

    主体西门庆,new一个手底下有妓女的老鸨,老鸨procuress.papapa(),实际是被代理的妓女prostitute.papapa()。 //执行接口想同,都是papapa

  重点:和策略模式类似,都是中间锦囊(王婆) 掌管很多 妓女类或妙计类

  优势:主要使用java多态

 

三、单例模式

  关键点:大臣main()、 皇帝(单例对象)

    皇帝变量是静态,皇帝类构造函数是用private限制的,对外开放的静态getInstance()方法中,调用构造函数生成对象。  //补充知识点:类的构造函数都是静态的,因为是类调用,而不是对象调用。

   重点:private static final Emperor emperor= new Emperor();  //改进后,避免getInstance()中的判空导致多进程下出错。final是不可修改,static表明属于类而不是对象

      public synchronized static getInstance(){return emperor;} // synchronized 修饰,表明即使多线程情况下,也顺序执行该函数。

  优势:保证皇帝对象唯一

 

四、多例模式

  关键点:有限个多例,如果无限个就变成普通的对象了

    private static int max_num = 5; //修饰的东西留意

    private static ArrayList  emperorList = new ArrayList(max_num); //这里面放对象

    static{

      for(int i=0; i< max_num;i++){

        emperorList[i].add(new Emperor()); //往里面添加

      }

    }

    public static Emperor getInstance(){***; return emperorList.get[i];} //对外开放用于获取对象

 

五、工厂模式

  关键点:女娲 、造人工厂、人种

    女娲main()调用造人工厂的静态方法createHuman(class c),利用Class.forName()函数的反射机制,获取对象并返回。

    public static Human createHuman(class c){

      human = (Human)Class.forName(c.getName()).newInstance();  //通过字符串获取类对象,经典方式

    }

    女娲main()调用时:Human YellowHuman = HumanFactory.createHuman( WhiteHuman.class ); //传入某个Human类,只是类,不是对象

  重点:女娲main调用,factory里制造对象

 

六、门面模式(facade pattern)        //两个字 “封装”

  关键点:写信人、邮局、信件(letter)

    写信人main,只要把地址和内容交给邮局对象,邮局对象会执行设置信件内容、设置地址、打包、发送等等           //实际上就是加入邮局这个中间层,封装底层

  重点:复杂流程操作,要对上层透明,加入中间层目的就是如此。

  优势:写信人只要声明邮局对象即可,无需关系底层操作流程,避免人为错误。

 

七、适配器模式(adapter pattern)

  关键点:老板、内部人员系统 、外部人员系统

    老板 通过内部系统查找 外部人员系统的信息,内部和外部的数据结构定义不一致,需要一个中间层

  重点:不同平台之间,构建中间层

 

八、模板方法(Template pattern)

  关键点:客户 、悍马、悍马模板

    客户main 获得一个悍马对象,悍马类继承自 抽象的悍马模板类,模板类中包括 (基本方法+模板方法),模板方法 是通过汇总或排序 基本方法 而产生的结果集。比如run()或execute()。

  重点:run()这个模板方法放在父类中,子类不需要实现。如果想设置run中基本方法的实现顺序或开关,可以用hook,钩子变量。

  优势:好多开源项目采用,因其扩展性好。

 

九、桥梁模式(bridge pattern)

  关键点:老板、公司、产品

    公司可以有多个子公司,一个公司可以有多种产品。方案:把产品作为公司一个属性,

    

  重点:

  优势:类间解耦,两个角色都可以自己无限扩展下去,相互不影响。解决了oop中继承特性的缺点。

 

posted @ 2015-03-19 19:07  zyliang  阅读(163)  评论(0编辑  收藏  举报