六、装饰模式
定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生产子类更为灵活
1、当系统需要新功能的时候,是向旧的类中添加新的代码。这些新加的代码通常装饰了原有类的核心职责或主要行为。它们在主类中加入了新的字段、新的方法和新的逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅为了满足一些只在某种特定情况下才会执行的特殊行为的需要,二装饰模式提供了一个非常好的解决方案,把每个要装饰的功能放在单独的类中,并让这个类包装它说是要装饰的对象。
七、代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问
应用场景:1、远程代理,为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实
2、虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长事件的真实对象
3、安全代理,用来控制真实对象访问时的权限
4、智能指引,是指当调用真实的对象时,代理处理另外一些事
八、工厂模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
对比:简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。简单工厂模式的缺点就是增加逻辑判断是要修改简单工厂,违背了OCP原则。
1、工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到客户端代码来进行。你向右加功能,本来是改工厂类的,而现在是修改客户端。
2、工厂模式克服了简单工厂违背开闭原则的缺点,又保持了封装对象创建过程的优点,缺点是每增加一个产品要加一个产品工厂的类,增加了额外的开发量。
九、原型模式
定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
1、原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。
2、一般在初始化的信息不发生变化的情况下,克隆是最好的办法,即隐藏了对象创建的细节,又对性能是大大的提高
3、不用重新初始化对象,而是动态的获得对象运行时的状态
十、模板方法模式
定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
1、既然使用了继承,并且肯定这个继承有意义,就应该要成为子类的模板,所以重复的代码都应该要上升到父类去,而不是让每个子类都去重复
2、当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。
3、模板方法模式是通过把不变行为搬移到超类,去除子类中重复代码来体现它的优势