美文网首页
Design Pattern

Design Pattern

作者: 小鲍比大爷 | 来源:发表于2019-03-02 20:52 被阅读0次
    • 设计模式是一种可复用的面向对象编程技术
    • 设计模式的原理:面向接口编程
    • 设计模式的目标:降低耦合,增强灵活性
    • 要让你的程序尽可能的重用
    • 将变化和不变的东西分离,抽象出不变的东西,那就做到了重用
    • 随着软件需求的增加和变化,不断地将公共不变的东西抽象出来,那就是重构,重构手段就是使用各种设计模式
    • 框架就是设计模式的重要体现,比如Spring全家桶等

    创建模式

    Factory 工厂模式
    使用工厂模式应该像使用new一样频繁
    参考1

    Prototype 原型模式
    通过复制对象的方法来获得与该对象一模一样的对象实例

    Builder 模式
    解耦对象装配方式和部件生成方式(变与不变)
    参考1
    参考2
    参考3

    Singleton 单例模式
    全局唯一的对象,常见模式。比如DataSource对象,一般在应用中单例表示

    结构模式

    Facade 外观模式

    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

    外观模式的一般描述是:外观模式定义了一个高层的功能,为子系统中的多个模块协同的完成某种功能需求提供简单的对外功能调用方式,使得这一子系统更加容易被外部使用
    参考1
    参考2

    image.png

    代理模式

    Provide a surrogate or placeholder for another object to control access to it.

    代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。比如在代理对象的方法前后插入其他行为。
    参考1

    image.png

    Adapter 适配器模式
    在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。本质还是组合和继承。

    Convert the interface of a class into another interface clients expect.
    Adapter lets classes work together that couldn't otherwise because of
    incompatible interfaces

    • 类适配器(继承)
      A class adapter uses multiple inheritance to adapt one interface to another:
    image.png
    • 对象适配器
      An object adapter relies on object composition:
    image.png

    参考1

    Composite 合成模式

    Compose objects into tree structures to represent part-whole hierarchies.
    Composite lets clients treat individual objects and compositions of objects
    uniformly.

    组合多个对象形成树形结构以表示“整体-部分”的结构层次。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。
    组合模式又可以称为“整体-部分”(Part-Whole)模式,属于对象的结构模式,它将对象组织到树结构中,可以用来描述整体与部分的关系。
    组合模式描述了如何将容器对象和叶子对象进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器对象和叶子对象,这就是组合模式的模式动机。

    image.png

    参考1

    Decorator 装饰器模式
    Attach additional responsibilities to an object dynamically. Decorators
    provide a flexible alternative to subclassing for extending functionality.

    image.png

    ***Bridge ***

    Decouple an abstraction from its implementation so that the two can vary independently.

    image.png

    解耦抽象类和行为,将跟抽象类本身无关的行为分解出去,通过另外一个代表行为的接口来进行桥接。好处在于使得抽象类的子类不需要实现跟具体实现相关的行为,委托给其他接口实现相关行为。进一步将变与不变的东西分离(分离出行为),减少耦合。
    参考1

    装饰器模式和代理模式的区别
    https://www.jianshu.com/p/c06a686dae39

    Flyweight 模式

    Use sharing to support large numbers of fine-grained objects efficiently.

    主要功能是共享对象

    行为模式

    Template Method 模式方法模式
    该模式就是简单的继承

    Define the skeleton of an algorithm in an operation, deferring some steps to
    subclasses. Template Method lets subclasses redefine certain steps of an
    algorithm without changing the algorithm's structure.

    Observer 观察者模式

    Define a one-to-many dependency between objects so that when one object
    changes state, all its dependents are notified and updated automatically

    通常也被称作:
    Dependents, Publish-Subscribe

    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.

    参考1
    参考2

    Command 命令模式

    Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.

    参考1
    参考2
    命令模式应用场景

    image.png image.png

    基于变与不变进行分析:Invoker是不变的,Receiver和Command是变化的,通过将变化的Command抽象为接口,ConcreteCommand对Receiver方法进行代理,将ConcreteCommand传入Receiver,达到Invoker与具体命令解耦的目的。解耦的结果是,新增Command仅需新增ConcreteCommand配上合适的Receiver即可,Invoker调用永远不变,Invoker适合模板方法使用(Invoker面向Command接口编程),符合开闭原则。

    State 状态模式

    Allow an object to alter its behavior when its internal state changes. The
    object will appear to change its class.

    image.png

    参考1

    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

    Mediator 中介者模式

    Define an object that encapsulates how a set of objects interact. Mediator
    promotes loose coupling by keeping objects from referring to each other
    explicitly, and it lets you vary their interaction independently.

    image.png

    Visitor 访问者模式

    http://www.runoob.com/design-pattern/visitor-pattern.html

    未完待续

    相关文章

      网友评论

          本文标题:Design Pattern

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