大话设计模式(程杰)笔记(二)

16.状态模式        当一个对象的内在状态改变时允许改变其行为,这个对象看起来是改不了其类
                     主要解决的是当控制一个对象状态改变的条件表达过于复杂时的情况,把状态的判断逻辑转移到表示不同转态行为的一系列类当中,可以把复杂的判断逻辑简化
 
 17.适配器模式      将一个类的接口转换为客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。            
 
    18.备忘录模式      在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态
                          Originitor 发起人   属性 state
                             行为  setMemento(Memento m)恢复状态
                   CreateMemento() 产生一个备份
         Memento  备忘录   属性 state 
                           行为 setState
                 getState
        Caretaker 管理者   属性 Memneto
                           行为  setMemento
                  getMemento
         备份   发起人产生一个备份(CreateMemento)传递给管理者(setMemento)
                           恢复  管理者返回备份(getMemento)传递给发起人(setMemento)
    19.组合模式        将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
                           基类 Component  属性 name
                             行为  Add(Component component)
                 Remove(Component component)
              Display(int depth)
                         派生类 叶子Leaf     实现基类方法  1叶子无法添加和删除子节点
                                         2. Display(int depth) 输出name
           分支节点  Composite   属性 一个Component 链表存储其子节点
                                                               Add 添加节点         
                                          Remove 删除节点
                  Display 输出所有节点
                 
 20.迭代器模式(Iterator)  提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露各个对象的内部表示。
 21.单例模式     保证一个类仅有一个实例,并提供一个访问它的全局访问点
                        1.将构造函数私有化
      2.添加一个私有静态对象引用
                        3.提供一个全局静态函数来返回改引用 且保证只产生一个实例
      
    22.合成、聚合复用原则:  (当类直接关系较弱时)尽量使用合成、聚合,尽量不要使用类继承。        
 23.桥接模式    将抽象部分与它的实现部分分离,使它们都可以独立地变化。
             即当一个类具有多种分类方式时,可将每一种分类作为基类抽象的合成部分,而不采用继承。这样抽象可以通过set来指定其每种分类(实现)的具体情况。
    
     抽象:Abstraction     属性 protected ImplementorA implementora
                                protected ImplementorB  implementorb
            行为  Operation
                 setImplementor
           
     实现(分类)    A类分类法  ImplementorA   行为 OperationImpA
                                     具体类别   ConcreteImplementorA1
                                                ConcreteImplementorA2
         
                 B类分类法 ImplementorB      行为  OperationImpB
                                 具体类别    ConcreteImplementorB1
               ConcreteImplementorB2
 24.命令模式     将一个请求封装为对象,从而可以用不同的请求对客户进行参数化;其它操作:对请求进行排队、记录请求日志,以及支持可撤销的操作。
                   优点 将请求的发出 和请求的具体执行分开
                 
                目录执行者   Receiver    行为 Action 执行请求
       命令       抽象  Command     属性 Receiver reciver 目录执行者
                                行为  Execute        执行命令
       具体目录     ConcreteCommand  实现父类
       命令传递者 Invoker    属性 Command command;
                             行为   setCommand 设置传递的命令
                  ExecuteCommand  执行传递的命令
            
 25.职责链模式  使多个对象都有机会处理请求,从而避免请求的发送者和接受者直接的耦合关系。将这些对象连成一条链,并沿着这条连传递该请求,知道有一个对象处理它为止。
               优点 接受者和发送者都没有对方的明确信息,且链中的对象自己也并不知道完整的链结构。结果是职责链可简化对象的相互连接,他们仅需保持一个指向其后继者的
      引用,而不须保持他所有的后继者,这就大大降低了耦合度。
     
      请求 Request   自定义
      处理者 Abstract  Hander  属性  protected Hander successor 继任者
                                行为 setSuccessor    设置继任者
                  abstract    HandleRequest(Request)
              ConcreteHander1   实现 HandleRequest方法 判断是否有权利处理该请求,有则处理,无则继任者处理该请求
        ConcreteHander2
 26.中介者模式  用一个中介者对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
                 缺点 当对象比较多时,中介者类会显得非常复杂
     
                   同事  abstract Colleague   属性 protected Meddiator mediator; 中介者
                  具体  ConcreteColleague  行为 send(Message message,Colleage colleague) 发送信息
                                      notify(Message message) 接收信息
                   中介者  abstract Mediator  行为 abstract send(Message message,Colleage colleague);
                               具体   ConcreteMediator  属性 :所有的同事对象引用
                                                        行为  所有的同事对象引用的设置器
                    实现Send(Message message,Colleage colleague)
 27.享元模式   运用共享技术有效的支持大量细粒度的对象。
                   内部状态 所有共享对象共有的属性
       外部状态 每个对象独立的属性,可作为每个对象行为的参数传递
     如果一个应用程序使用了大量的对象,而这些对象具有很多共性时应考虑使用享元模式。 
      
     
    外部状态类 Extrinsicstate
      共享类 Flyweight   行为 Operation(Extrinsicstate extrinsicstate);
          具体 共享类 ConcreteFlyweight
            不共享的类 UnsharedConcreteFlyweight
         享元工厂  FlyweightFactory  属性 共享类类型的<String,Flyweight>Hashtable 存储所有已生成的共享实例
                                   行为  getFlyweight(String key) 返回共享实例
             
 28.解释器模式  给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
                      应用 正则表达式
    
      语句Contex     属性 input
                          output
       抽象表达式   AbstractExpression  行为 abstract Interpret(Context context)
       实际表达式   终结符表达式   TerminalExpression
                    非终结符表达    NonTerminalExpressionA, NonTerminalExpressionB…… 每一种表达式都定义一中解释
 
    29.访问者模式  表示一个作用于某对象结构中各元素(对象)的操作。它使得可以在不改变各元素的类结构的前提下定义作用于这些元素的新操作。
             
     元素 abstract  Element   行为 abstract Accept(Visitor visitor)
            具体 ConcreteElementA     实现 Accept(Visitor visitor){visitor.VisitConcreteElementA(this)}
           ConcreteElementB     实现 Accept(Visitor visitor){visitor.VisitConcreteElementB(this)}
       
       访问者 abstract Visitor   VisitConcreteElementA(ConcreteElementA ConcreteElementA)
            VisitConcreteElementB(ConcreteElementB ConcreteElementB)
           
     具体       ConcreteVisitorA
          ConcreteVisitorB
       对象数据结构   ObjectStructure   属性 Element 线性表  ArrayList arraylist
                                      行为  Attach(Element element) 添加元素
                    Detach(Element element)  移除元素
              Accept(Visitor visitor ){
                  for (Element element : arrayList) {
                  element.Accept(visitor);
                  }
              }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值