定义:设计模式(Design pattern)代表了最佳的实践,是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
按照设计模式的目的可以分为创建型、结构型和行为型三大类。
工厂方法模式(Factory Method) :定义一个创建对象的接口,但由子类决定需要实例化哪一个类。分为简单工厂、工厂方法、抽象工厂模式
**抽象工厂模式(Abstract Factory)**提供一个接口, 可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类。是工厂的工厂,抽象工厂可以创建具体工厂,由具体工厂来产生具体产品
构建器模式(Builder) :将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的方式进行创建。
应用:对象具有复杂的内部结构,与工厂模式的区别是:建造者模式更加关注与零件装配的顺序
原型模式(Prototype) :通过拷贝这个原型来创建新的对象。
应用:Spring框架中的多例就是使用原型
单例模式(Singleton) :保证一个类只有一个实例,并提供一个访问它的全局访问点。
应用:网站的计数器、应用程序的日志应用、Windows的(任务管理器)、windows的(回收站)、多线程的线程池的设计(线程池要方便对池中的线程进行控制)
适配器模式(Adapter) :将一个类的接口转换成用户希望得到的另一种接口。 它使原本不相容的接口得以协同工作。
适配器,桥接
桥接模式(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) :表示一个作用于某对象结构中的各元素的操作,使得在不改变各元素的类的前提下定义作用于这些元素的新操作