设计模式--高频

设计模式

定义

定义:设计模式(Design pattern)代表了最佳的实践,是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

六大原则

  • 开放封闭原则:扩展软件实体来解决需求变化,而不是通过修改已有的代码来完成变化
  • 里氏代换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。
  • 依赖倒转原则:对接口编程,依赖于抽象而不依赖于具体
  • 接口隔离原则:使用多个隔离的接口,比使用单个接口要好
  • 迪米特法则(最少知道原则):一个对象应当对其他对象有尽可能少地了解,简称类间解耦,低耦合,高内聚。
  • 单一职责原则:

按照目的分类

按照设计模式的目的可以分为创建型、结构型和行为型三大类。

  • 创建型模式与对象的创建有关。包括Factory Method、Abstract Factory. Builder 、Portotype 和Singleton.
  • 结构型模式处理类或对象的组合。包括适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
  • 行为型模式对类或对象怎样交互和怎样分配职责进行描述。包括Intepreter、Template Method、Chain of Responsibility Command、lterator 、Mediator 、Memento Observer State Strategy和Visitor.Proxv模式的结构图如下所示,

工厂方法模式(Factory Method) :定义一个创建对象的接口,但由子类决定需要实例化哪一个类。分为简单工厂、工厂方法、抽象工厂模式

**抽象工厂模式(Abstract Factory)**提供一个接口, 可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类。是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品

构建器模式(Builder) :将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的方式进行创建。

    应用:对象具有复杂的内部结构,与工厂模式的区别是:建造者模式更加关注与零件装配的顺序

原型模式(Prototype) :通过拷贝这个原型来创建新的对象。

     应用:Spring框架中的多例就是使用原型

单例模式(Singleton) :保证一个类只有一个实例,并提供一个访问它的全局访问点。

    应用:网站的计数器、应用程序的日志应用、Windows的(任务管理器)、windows的(回收站)、多线程的线程池的设计(线程池要方便对池中的线程进行控制)

适配器模式(Adapter) :将一个类的接口转换成用户希望得到的另一种接口。 它使原本不相容的接口得以协同工作。

适配器,桥接

设计模式--高频_第1张图片

桥接模式(Bridge) :将类的抽象部分和它的实现部分分离开来,使它们可以独立地变化。

组合模式(Composite) :将对象组合成树型结构以表示“整体部分”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。

装饰模式(Decorator) :动态地给一个对象添加一些额外的职责。它提供了用子类扩展功能的一个灵活的替代,比派生一个子类更加灵活。

外观模式(Facade) :隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。

享元模式(Flyweight) :提供支持大量细粒度对象共享的有效方法。

代理模式(Proxy) :为其他对象提供一种代理以控制这个对象的访问。

        应用: Spring AOP、日志打印、异常处理、事务控制、权限控制等     

职责链模式(Chain of Responsibility) :通过给多个对象处理请求的机会,减少请求的发送者与接收者之间的耦合。将接收对象链接起来,在链中传递请求,直到有一个对象处理这个请求。

命令模式(Command) :将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。

解释器模式(Interpreter) :给定一种语言, 定义它的文法表示,并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子。

迭代器模式(lterator) :提供一种方法来顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。

中介者模式(Mediator) :用一个中介对象来封装一系 列的对象交互。它使各对象不需要显式地相互调用,从而达到低耦合,还可以独立地改变对象间的交互。 备忘录模式(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以在以后将该对象恢复到原先保存的状态。

观察者模式(Observer) :定义对象间的一种一对多的依赖关系,发布-订阅模式,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。

  应用:事件多级触发场景,消息队列、事件总线的处理机制

状态模式(State) :允许一个对象在其内部状态改变时改变它的行为。

策略模式(Strategy) :定义了一系列的算法、逻辑、 相同意义的操作,并将其封装起来,而且使它们还可以相互替换。简化 if…else 所带来的复杂和难以维护

    应用:我要一个支付模块,我要有微信支付、支付宝支付、银联支付等

模板方法模式(Template Method) :定义一个操作中的算法骨架,而将一些步骤延迟到子类中, 使得子类可以不改变一个算法的结构即可重 新定义算法的某些特定步骤。

     应用:数据库访问的封装、Junit单元测试、servlet中关于doGet/doPost方法的调用等

访问者模式(Visitor) :表示一个作用于某对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义作用于这些元素的新操作

你可能感兴趣的:(测试开发,设计模式)