大话设计模式读后总结(一)

简单工厂模式:定义一个抽象产品接口和具体工厂类,用该来完成创建实例的过程;

工厂类中包含了必要的逻辑判断,根据调用者的选择动态实例化相关类的对象,去除了调用者和具体产品的依赖;

不足:违背了开放封闭原则:改变时要更改工厂类中代码;

升级版:

工厂方法模式:定义一个抽象产品接口+一个抽象工厂接口,将具体产品的实例化延迟到实现其子类,让子类选择决定;

好处:满足开放封闭原则:改变时,不需要改原工厂方法的代码,只要添加一个具体工厂即可;

不足:但将简单工厂的内部逻辑判断移到了调用者中,因此改变时要修改调用者端的代码;

抽象工厂模式:创建一组抽象产品接口,

好处:易于交换产品系列,只要改变一个具体工厂,即可使用不同的产品配置;

不足:增加功能时,对代码增加和改动都很大;

升级版:用简单工厂来改进抽象工厂

升级版:再引入“配置文件(存储字符串变量)+反射机制(可以用字符串变量来动态创建对象)”解决简单工厂中   要用逻辑判断将工厂类中代码写死弊端 ;  这样一来,完美!!

策略模式: 抽象算法,减少同使用算法者的耦合;

   定义了算法家族(工作相同,实现不同),用接口/抽象类封装,减少同使用算法者的耦合;

    缺点:变化时,需要在客户端来改代码;可以采用简单“工厂模式+策略模式”来解决这一问题;

装饰模式:为对象动态的添加职责,比生成子类更为灵活;

   装饰者抽象类实现了抽象对象接口 并 持有抽象对象接口的引用,采用显式聚合方式:setCompent(抽象对象)来获取具体对象的引用, 在此基础上扩展其功能; 

  灵活看待:只有一个具体对象时,没必要有抽象接口,可以令装饰者抽象类是具体对象类的子类来实现其功能;当然,若只有一个装饰者类时,也没必要有装饰者抽象类;

代理模式:为对象提供代理对象,以控制对真实对象的访问;

      代理类实现了抽象对象接口 并 持有真实对象的引用,采用隐式聚合方式:request(){new 真实对象}来获取真实对象的引用,称为其代理;

      适用场合:远程代理,虚拟代理,安全代理,智能指引;

原型模式:指定原型对象,通过拷贝机制来创建新的对象;即:用对象去创建对象

 对象中存在引用类型成员属性时:  浅复制(只复制引用,不复制对象;原对象与其副本引用同一属性对象) 与 深复制(只复制引用,也复制对象,原对象与其副本引用不同属性对象)

模版方法模式:定义一个操作骨架,将一些步骤延迟到子类去实现;

   将不变的行为搬移到超类,去除子类中的重复代码,可实现代码复用;

外观模式(门面模式):为子系统的一组接口提供一个一致的界面,即:一个高层接口,使得更加容易使用;

  适用场合:设计是令层与层的降低耦合;开发时减少子系统间的依赖;维护遗留系统时,同新系统交互;

建造者模式:将对象的构建和表示分离,使得同样的构建过程可以创建不同的表示;而建造过程和细节,使用者不需知道;

 适用场合:当前创建对象的方法,独立于 对象的组成部分和装配方式时;用于创建复杂对象:其内部建造顺序稳定但每一步通常面临着复杂的变化;  

观察者模式(发布订阅模式):定义一对多的依赖关系,当主题对象发生变化时,观察对象也会随之变化;  是依赖倒置的最佳体现;

  使用场合:当一个对象的改变,不知道要影响多少具体对象改变时;

不足:当使用他人写好的控件时,无法实现自定义的观察者抽象接口,而且不管每个具体观察者的行为如何,方法名还必须相同才行;

升级版:

事件委托机制:不需要实现同一接口,去除了抽象观察接口,让各个观察者的方法名可以不同; 例如:事件监听 

注:委托是一种引用方法的类型,是对方法的抽象,委托实例就是一个具体的方法;

前提:委托中方法要拥有相同的参数和返回值类型;

 

posted @ 2017-07-02 15:44  简笔话_Golden  阅读(319)  评论(0编辑  收藏  举报