设计模式初探

目的:分辨不同模式的区别,明晰不同模式的优缺点,及各种模式的变种

步骤:初步收集模式的同时,与前面比较,当后面出现的模式与前面有可比之处时,再加入比较

分类:由不同的分类法,可以将内容学习的更透彻,因此需要在学习中不断的补充完整(继承与组合,解耦方式...)

说明:因此这篇文章不可能一两天完成,我会把内容逐渐补充完整

一、模式介绍
1、模版方法
            abstract class AbstractClass{
                  final void templateMethod(){                                       //final 提示我们这个模式可用来建造框架
                        primitiveOperation1();
                        primitiveOperation2();
                        concreteOperation();
                        hook();
                  }
                  abstract void primitiveOperation1();                            //abstract将实现推迟到子类
                  abstract void primitiveOperation2();
                  final void concreteOperation(){                                   //可以通用的子方法我们直接实现
                       //implement here
                  }
                  void hook() {}                                                         //钩子增加了灵活性(1.让子类能够有机会对模板方法中某些即将
            }                                                                                    发生的(或刚刚发生的)步骤做出反应.2.作为条件控制,影响抽
                                                                                                  象类中的算法流程.       ...)

2、组合模式
      允许你将对象组成树形结构来表现“整体/部分”的层次结构。组合能让客户以一致的方式处理个别对象和对象组合
                   Client --------------->Component
                                                    operation()
                                                    add(Component)
                                                    remove(Component)
                                                 ^ getChild(int)^
                                                /                       \
                                              /                           \    
                                       Leaf                               Composite
                                       operation()                     add(Component)
                                                                            remove(Component)
                                                                            getChild(int)
                                                                            operation()

3、状态模式
      允许对象在内部状态改变时改变他的行为,对象看起来好像修改了它的类(使用组合通过简单引用不同的状态对象来造成类改变的假象)
                     Context------------------->State
                     request()                           handle()
                        |                                   /          \
                        |                                 /              \
                    state.handle()        ConcreteStateA     ConcreteStateB
                                                handle()                handle()

二、模式辨析
           好莱坞原则VS依赖倒置原则: 技巧(弹性设计,低层互操作,不会让高层组件依赖底层组件) VS 多使用抽象(更注重如何在设计中避免
                                                  依赖) 目标都在于解耦

           模版方法VS策略模式 :  定义算法大纲VS定义算法家族,算法互换   继承VS组合  实现抽象方法VS实现整个算法

           模板方法VS工厂方法 :  工厂方法是模板方法的一个特殊版本

           状态模式VS策略模式 :  状态改变定义好了VS控制对象使用策略      具有相同的类图,目的不同
          
三、模式分类
           基于继承                                      基于组合
           模板方法                                      策略模式

原文地址:https://www.cnblogs.com/westwind/p/1541686.html