系统架构设计师学习笔记 第十章 设计模式

步积关注
0.0792018.07.13 07:42:32字数 2,357阅读 468

第十章 设计模式

10.1 设计模式概述

对被用来在特定场景下解决一般设计问题的类和互相通信的对象的描述,通俗的说,可以把设计模式理解为对某一类问题的通用解决方案。

10.1.1 设计模式的概念

设计模式解决的是一类问题。是一种通用的解决方案,而不是具体的,也不是唯一的。学习设计模式时需要注意一下两点:

  1. 学习这些模式是一个方面,另一方面更要了解模式中的思想。设计模式本身是为了提高软件架构的质量,学习设计模式的目的也是为了提高架构设计的水平。
  2. 设计模式虽然可以使设计变得更精妙,但滥用设计模式会适得其反。

    10.1.2 设计模式的组成

    在描述一个设计模式,至少要包含四个方面:模式名称、问题、解决方案、效果。

    10.1.3 GoF设计模式

    23个设计模式统称为GoF模式,这23个模式如下:

  3. Factory Method模式:提供了一种延迟创建创建类的方法,使用这个方法可以在运行期间由子类决定创建哪一个类的实例。

  4. Abstract Factory模式。又称抽象工厂模式,主要为解决复杂系统中对象创建的问题。抽象工厂模式提供了一个一致的对象创建接口来创建一系列具有相似基类或相似接口的对象。
  5. Builder模式。与抽象工厂模式非常类似,但是Builder模式是逐步的构造出一个复杂对象,并在最后返回对象的实例。可以把复杂对象的创建于表示分离,使得同样的创建过程可以创建不同的表示。
  6. Prototype模式。可以根据原型实例制定创建的对象的种类,并通过深复制这个原型来创建新的对象。有着与抽象工厂模式和建造者模式相同的效果,不过当需要实例化的类是在运行期才被指定的而且要避免创建一个与产品曾是平行的工厂类层次时,可以使用Prototype模式。该模式可以在运行时增加或减少原型。
  7. Singleton模式。保证在一个类仅有一个实例,从而可以提供一个单一的全局访问点。
  8. Adapter模式。可以解决系统间接口不相容的问题。通过Adapter可以把类的接口转化为客户程序所希望的接口,从而提高复用性。
  9. Bridge模式。把类的抽象部分同实现部分相分离,这样类的抽象和实现都可以独立的变化
  10. Composite模式。提供了一种以树形结构组合对象的方法,该模式可以使单个对象和组合后的对象具有一致性以提高软件的复用性。
  11. Decorator模式。可以动态的为对象的某一个方法增加更多的功能,很多时候,使用该模式可以不必继承出新的子类从而维护间接的类继承结构。
  12. Facade模式。为一组类提供了一致的访问接口。使用该模式可以封装内部具有不同接口的类,使其对外提供统一的访问方式。
  13. Flyweight模式。可以共享大量的细粒度对象,从而节省创建对象所需要分配的空间,不过在时间上的开销会变大。
  14. Proxy模式。为对象提供了一种访问代理,通过对象代理可以控制客户程序的访问,也可以将开销较大的访问化整为零,提高访问效率。
  15. Interpreter模式。定义了一个解释器,来解释遵循给定语言和文法的句子。
  16. Template Method模式。定义一个操作模板,其中的一些步骤会在子类中出现,以适应不同的情况。
  17. Chain of Responsibility模式。可以把响应请求的对象组织成一条链,并在这条对象链上传递请求,从而保证多个对象都有机会处理请求而且可以避免请求方和响应方的耦合。
  18. Command模式。将请求封装为对象,从而增强请求的能力。
  19. Iterator模式。提供了顺序访问一个对象集合中的各元素的方法,使用该模式可以避免暴露集合中对象的耦合关系。
  20. Mediator模式。可以减少系统中对象间的耦合性。该模式使用中介对象封装其他的对象,从而使这些被封装的对象间的关系就成了松散耦合
  21. Memento模式。提供了一种捕捉对象状态的方法,且不会破坏对象的封装。并且可以在对象外部保存对象的状态,并在需要的时候恢复对象状态。
  22. Observer模式。提供了将对象的状态广播到一组观察者的方式,从而可以让每个观察者随时可以得到对象更新的消息。
  23. State模式。允许一个对象在其内部状态改变的时候改变它的行为。
  24. Strategy模式。可以让对象中算法的变化独立于客户。
  25. Visitor模式。表示对某对象结构中各元素的操作,使用该模式可以在不改变各元素类的前提下定义作用于这些元素的新操作。

    10.1.4 其他设计模式

  26. Intercepting Filter模式。通过截取客户请求,并将请求发送到Filter中,一步一步的进行预处理,知道这些处理结束,请求才会被转发到真正响应客户请求的Servlet中

  27. Session Facade模式。

    10.1.5 设计模式与软件架构

    软件架构描述了软件的组成。设计模式则更侧重于类与类、对象与对象之间的关系。
    常见的架构风格有分层架构、客户端——服务器架构、消息总线、面向服务的架构。

    10.1.6 设计模式的分类

    GoF模式
    -|创建型|结构型|行为型
    —|—-|
    应用于类|Factory Method|Adapter|Interpreter
    Templete Method
    应用于对象|Abstract Factory
    Builder
    Prototype
    Singleton|Adapter
    Bridge
    Composite
    Decorator
    Facade
    Flyweight
    Proxy|Chain of Responsibility
    Command
    Iterator
    Mediator
    Memento
    Observer
    State
    Strategy
    Visitor
    J2EE设计模式分类
    表现层|业务层|综合层
    ——-|—-
    Intercepting Filter
    Front Controller
    View Helper
    Composite View
    Service to Worker
    Dispacher View|Business Delegate
    Value Object
    Session Facade
    Composite Entity
    Value Object Assembler
    Value List Handler
    Service Locator|Data Access Object
    Service Activator

    10.2 设计模式及实现

    10.2.1 Abstract Factory模式—抽象工厂模式

    Java设计模式-工厂模式

    10.2.2 Singleton模式—单例模式

    Java设计模式-单例模式

    10.2.3 Decorator模式—装饰模式

    Java设计模式-装饰模式

    10.2.4 Facade/Session Facade模式—外观模式、门面模式

    Java设计模式-装饰模式

    10.2.5 Mediator模式—中介者模式

    Java设计模式-装饰模式

    10.2.6 Observer模式—观察者模式

    Java设计模式-观察者模式

    10.2.7 Intercepting Filter模式—筛选器模式

    1. 意图解决的问题

    在使用MVC架构进行Web应用开发时,通常需要对来自于客户的请求进行一些预处理,如验证客户身份、验证请求来源、对请求解码等,然后再传递给控制器。如果把这些预处理都交给控制器来完成,将增加控制器的复杂度,而且难以维护和扩展。

    2. 模式描述

    FilterManager负责调度整个FilterChain,它将在请求到达Target前拦截请求,并传递给FilterChain,由FilterChain中的过滤器依次进行预处理。知道请求经过最后一个过滤器后才完成了全部的预处理,然后由FilterManager把请求转发给实际的目标。

    3.效果

    使用该模式使得预处理的逻辑和真正的处理逻辑分离,进行实际处理的Target只需要关心具体的逻辑,而同请求相关的预处理都放在FilterManager中进行。同时解除了这两类处理的耦合性,扩展、修改预处理过程变得容易,系统具有更好的维护性和扩展性

    10.3 设计模式总结

    学习设计模式最重要的是理解,而不是生搬硬套。每种设计模式中都包含着良好的设计架构的思想,如隐藏内部细节,降低耦合度等,越是复杂的系统越是需要这些思想的支撑。

5人点赞

日记本

更多精彩内容,就在简书APP