【设计模式】设计模式一句话总结

来源:互联网 发布:更改网卡mac地址win10 编辑:程序博客网 时间:2024/06/17 07:54

前言


         所谓设计模式,简单的理解,就是设计面向对象的软件开发的经验总结。


观察者模式(Observer)


       定义对象间的一种一对多依赖关系,使得当一个对象改变状态时,其相关依赖对象皆得到通知并被自动更新


命令模式(Command)


       将行为抽象和解耦,例如绘图命令包含钢笔、笔刷、油漆桶等,每个命令可以包含draw、undo、redo等操作


工厂方法模式(Fatory Method)


       隔离创建对象的细节,使得创建对象的行为可扩展,一般配合Singleton使用。


单例模式(Singleton)


       确保一个其一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。


抽象工厂模式(Abstractfactory)


       该模式抽象出创建一组相关对象的接口,其中每个方法即为factory method,例如创建一组相关的UI控件等。


构建模式(Builder)


       类似抽象工厂,它把一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,该模式包含了对象构造的若干过程,因此天然的与Template结合。


模板方法模式(Template Method)


       模板方法模式定义一个操作中算法的骨架,以将一些步骤延缓到子类中实现。该模式让子类重新定义一个算法的某些步骤而无须改变算法的结构,它与多态紧密结合,其实任意的多态使用即为该模式


桥接模式(Bridge)


       将抽象部分与实现部分分离,使得它们两部分可以独立地变化,它使用关联代替继承,解决类多维度的扩展导致的类爆炸的问题。例如一本书,从语言上看分为中英文(共X种),从类别上看分为小说散文等(共Y种),从包装上分为精装平装等(共Z种),那么如果采用继承需要三层,共X*Y*Z个类;如果分别包含三种分类的接口,则一共只需要X+Y+Z个类。


适配器模式(Adapter)


       将一个接口转换成为客户想要的另一个接口,该模式使接口不兼容的那些类可以一起工作,处理遗留系统的不二法宝,也可以用空方法实现接口作为抽象类。


装饰模式(Dacorator)


       动态地给一个对象增加其他职责,就增加对象功能来说,装饰模式比生成子类实现更加灵活,常用于在原函数执行前后做一些额外的工作,例如定制输入/输出流、加解密、AOP等。


代理模式(Proxy)


       代理模式为其他对象提供一个代理以控制对这个对象的访问,与Dacorator结构上很像,但逻辑上不同,decorator是在原有的基础上做额外的工作,而Proxy是原对象的一个完整的替代品,例如图片加载中的占位符。


策略模式(Strategy)


       策略模式定义了一系列的算法,将每一个算法封装起来,并让它们可以相互替换。该模式让算法独立于使用它的客户而变化。使用接口即使用Strategy,用于隔离变化。


迭代器模式(Iterator)


       提供一种方法可以访问聚合对象,而不用暴露这个对象的内部表示


状态模式(State)


       能够使一个对象的内在状态改变时允许改变其行为,使该对象看起来像是改变了其类一样,并封装了FSM(有限状态机)的状态与状态迁移,每个状态定义了资深的输入与状态迁移,比传统的switch写法更灵活,例如电梯调度。


外观模式(Facade)


        它提供了一个统一的接口去访问多个子系统的多个不同的接口,相当于一个高层次的接口,使得子系统更容易被使用,其UML图类似树状结构,其本质就是利用树状结构减少调用者的复杂度


责任链模式(Chain of Responsibility)


       责任链模式能避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理为止。一组对象按照既定的顺序关联起来,依次处理请求,其中任一对象都有权停止调用的继续传递。


备忘录模式(Memento)


       备忘录模式在不破坏封装的前提下捕获并且保存一个对象的内部状态,这样可以将对象恢复到原先保存的状态。例如在Office软件中Ctrl+Z键会取消最后一次用户操作。


访问者模式(Visitor)


       访问多种类型的元素时,很容易写出if-else的代码,如果类型变化不大但是访问的行为(例如输出元素)容易发生变化时,适合此模式。具体地,为每个元素定义访问行为的接口,在对应的实现中可以调用某个visitor,而visitor的实现类定义具体的实现


解释器模式(Interpreter)


       给出一种语言,定义这种语言的文法的一种表示,定义一个解释器,并用它来解释使用这种语句的句子,这就是解释器。


调停者模式(Mediator)


       对于n个对象,可能共有O(n^2)个联系,使用mediator可以将复杂可变的联系行为封装在该类中,每个对象无需相互引用就可以直接联系,并且还可以让用户可以独立变化多个对象相互作用。


享元模式(Flyweight)


       复用变化少的对象,常用于各种资源池的设计,例如线程池。享元模式运用共享技术有效地支持大量细粒度的对象,系统只使用少量的对象,而这些对象都相近、状态变化很小、对象使用次数较多。


原型模型(Prototype)


       用于以某个对象为模子创建一个新对象的场景,例如幻灯片中的母版与普通页、对象的克隆等。   




OO回顾

  1. 抽象:抽象是为了简化问题,简单即美。
  2. 继承:为了便于扩展或改写原有的功能。
  3. 多态:为了便于改写原有的功能。
  4. 封装:组件化,便于理解、替换和复用,因此系统会更加灵活。

  • 类关系

        。依赖:很弱的关系,A中用过B就是A依赖B

        。继承:子类

        。实现:接口/抽象类

        。关联:聚合,has-a,部分与整体的生命周期可以不同,大雁和雁群。

                       组合,contains-a,关系更强,部分依赖整体的生命周期,大雁和雁翅膀。


       接口:作为最重要的抽象形式之一,接口可以看做设计模式的基石,所以面向接口编程被广泛采用。接口即契约。好的接口必须小而精(高内聚),但是也需避免接口膨胀和过度设计,这是一个权衡。


      设计模式的优点:使得系统灵活可扩展,也即使用设计模式的目标。

                  缺点:增加系统复杂度,有过度设计的风险,因此适用于系统会不断发生变化或者新老系统共存的场景。


      开闭原则:对扩展开放,对修改关闭

      高内聚/低耦合:单一职责、面向接口

      接口隔离:小、高内聚

      依赖倒置:高层依赖底层,依赖抽象


                                       参考文章:http://blog.csdn.net/baple/article/details/39178463

1 0
原创粉丝点击