zoukankan      html  css  js  c++  java
  • 设计模式初探

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

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

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

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

    一、模式介绍
    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控制对象使用策略      具有相同的类图,目的不同
              
    三、模式分类
               基于继承                                      基于组合
               模板方法                                      策略模式

  • 相关阅读:
    mysql5.7密码修改与报错分析
    Nginx安装与升级(包括虚拟主机)
    寻找【System.FormatException: Base64 字符数组的无效长度】的解决方法
    关于sql server 2008 R2中遇到的sql server 代理启动不了的解决过程
    【EDM经验交流】之如何监控某个域名邮箱发送到网易的邮件接收情况?
    microsoft sql server 2008 5123
    ms sql server 2008 数据库自动备份作业权限问题
    【EDM经验交流】之邮件服务器容量判断
    nextSibling
    一步一步理解拖拽Drag(一)
  • 原文地址:https://www.cnblogs.com/westwind/p/1541686.html
Copyright © 2011-2022 走看看