美文网首页
设计模式理解与实践

设计模式理解与实践

作者: 北雁南飞_8854 | 来源:发表于2020-02-06 10:37 被阅读0次

    二、结构型模式

    桥接模式

    1. 概念

    将抽象部分与它的实现部分分离,使他们都可以独立地变化。
    Decouple an abstraction from its implementation so that the two can vary independently.

    2. 理解:

          如果在一个继承体系下,有两个纬度上的变化,则需要定义两个不同的接口将两个维度分开,使两者可以独立地扩展,而不会相互影响。其中一个是Abstraction,称为抽象部分的抽象类;另一个是Implementor,称为实现部分的接口。Abstraction持有一个Implementor对象的引用。
    如图所示:


    bridge.png

    组合模式

    1. 概念

    将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以使用一致的方法操作单个对象(individual objects)和组合对象(compositions of objects)。
    Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.

    2. 理解

    组合模式的参与者
    (1) Component
    定义组件的公共接口;
    (2) Leaf
    表示叶子结点对象,叶子结点不再包含子结点对象;
    定义和实现叶子结点对象的行为;
    (3) Composite
    存储子部件(child components);
    实现与子部件相关的操作;
    (4) Client
    通过组件接口来操作组合结构里面的组件对象。
    如图所示:


    composite.png

    装饰者模式

    1. 概念

    动态地给一个对象添加一些额外的职责。相比子类化,它为提供了一种更加灵活的、扩展功能的方案。
    Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality.
    如图所示:


    decorator.png

    外观模式

    1. 概念

    为一个复杂的子系统提供一个统一的(unified)、更高层(higher-level )的接口,使得访问子系统更加容易一些。
    Provide a unified interface to a set of interfaces in a subsystem.
    Facade defines a higher-level interface that makes the subsystem easier to use.

    享元(flyweight)模式

    1. 概念

    概念:
    运用共享技术高效地(efficiently)支持大量细粒度(fine-grained)的对象。
    Use sharing to support large numbers of fine-grained objects efficiently.

    flyweight是一个共享对象,它可以同时在多个场景中使用,并且在每个场景中flyweight都可以作为一个独立的对象,这一点与非共享对象的实例没有区别。
    有两个概念:内部(intrinsic)状态和外部(extrinsic)状态:

    • 内部状态值保存于flyweight实例中,它包含了独立于flyweight场景的信息,这些信息使得flyweight可以被共享。
    • 外部状态值依赖于flyweight的上下文(context),且根据context的变化而变化,因此不可共享。由client实例负责在需要它的时候传递给flyweight实例。
      如图所示:


      flyweight.png

    三、行为模式

    3.1 职责链(Chain Of Responsibility)

    概念:

    使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
    Avoid coupling the sender of a request to its receiver by giving more than one
    object a chance to handle the request. Chain the receiving objects and pass the
    request along the chain until an object handles it.

    3.2 命令(Command)

    概念:

    将一个请求封装为一个对象(包含Receiver和Action),从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。
    Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.

    观察者模式(Observer)

    1. 概念

    定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都能得到通知并自动更新。
    Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

    3.3 策略(Strategy)
    概念

    定义一系列的算法,把他们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立与他们的客户而变化。
    Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
    简单来说,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。
    定义了一系列算法;
    对每个算法单独封装;
    每个算法可以相互替代。


    image.png
    访问者(Visitor)

    概念:
    Represent an operation to be performed on the elements of an object structure.Visitor lets you define a new operation without changing the classes of the elements on which it operates.
    将对象结构(object structure)和结构中各元素(elements)上执行的操作(operation)分离,使得添加新操作时无须修改对象的结构。


    visitor.png

    相关文章

      网友评论

          本文标题:设计模式理解与实践

          本文链接:https://www.haomeiwen.com/subject/ogyyxhtx.html