# design-pattern **Repository Path**: dalianmao19880710/design-pattern ## Basic Information - **Project Name**: design-pattern - **Description**: 设计模式 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-02 - **Last Updated**: 2021-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # design-pattern #### 介绍 设计模式 单例模式(Singleton),类似于一种技巧,是工厂模式一种数量上的特例,相当于强制实现了有限、唯一对象的生产。 建造者模式(Builder),侧重点在于如何实现对象创建过程的自由组合,避免在代码中出现大量 new 式的硬编码。当对象结构发生改变时,能灵活增删步骤节点,还能避免对程序中大量分散 new 语句的修改。换句话说,它实现了对象创建过程的多态。 抽象工厂模式(Abstract Factory),重点是创建一组实现统一抽象产品的工厂对象族(同一个逻辑层级),本质上是为了寻找正确的抽象产品。它可以很好地保证被创建对象的工厂之间的一致性,常常用来解决跨平台的设计问题。 工厂方法模式(Factory Method),有效解决了创建对象时的不确定性。使用的办法就是将创建对象的时机延迟到了每一个具体的创建工厂中,让具体工厂自行解决对象的复杂创建过程,并通过统一的定义接口来保证创建对象时的可任意替换性。换句话说,它实现了对象创建时的多态。 原型模式(Prototype),就是一种将对象生成的责任代理给自己的模式,也就是“复制自我”。通过复制能快速建立运行的对象副本,最大的作用在于动态扩展运行时的对象能力。换句话说,它实现了对象拷贝的多态。 适配器模式,实现了不同接口功能之间的转换,为组件的快速复用提供了直接的解决办法。 桥接模式,实现了抽象实体和抽象行为之间的永久绑定,可以理解为在基于已有的构件上设计可能会发生变化的行为。它往往与抽象工厂模式共同用于跨平台设计的场景。 组合模式,用于表达整体和部分的关系,可以忽略单个对象和合成对象之间的差别。它实际采用的是一种树状结构。 装饰模式,与继承不同,通过代理方式实现了接口功能的多态,避免了大量子类的派生。它适用于链状和树状的结构,但容易造成对象与装饰器之间耦合度过高。 门面模式,用于对子系统提供统一的接口。 享元模式,用于解决大对象重复创建损耗资源的问题,通过共享对象池来复用对象。 代理模式,模式的结构与装饰模式非常相似,但侧重点不同,一种是修改对象的行为,另一种是控制访问。 访问者模式,在对象级别中实际为树型结构,与抽象工厂模式类似。它给使用者提供了一种统一访问树结构中数据节点的方式,因此具备灵活扩展的特性。 模板方法模式,定义一个算法模板,并将具体的执行步骤延迟到子类中实现。 策略模式,将多个不同的算法封装成策略,让它们可以互相替换,适合应用于对计算效率有一定要求的系统。策略模式通常会和工厂方法模式配合使用,为使用者提供一组使用策略。 状态模式,最常用的实现方式是状态机,大量应用于需要控制状态流转的系统中。常用在游戏、工作流引擎、购物流程等系统开发中。 观察者模式,是经典 MVC 模式的变形,与中介者模式的结构很类似,在结构上都是星形结构,但侧重点不同。观察者模式侧重于将观察者和被观察者代码解耦,中介者则侧重于充当两个对象之间的新媒介。观察者模式的应用场景非常广泛,比如,邮件订阅、公众号推送、RSS、消息中间件等。 备忘录模式,也叫快照模式,通常用于捕获一个对象的内部状态,比如保存、打开、关闭等状态,并在执行对象之外保存一个副本状态,方便用于之后恢复对象到某一个时间状态。 中介者模式,最大的作用在于解耦对象之间的直接引用,在结构上体现为将网状的结构变成以中介者为中心的星形结构,从而保证了对象行为上的稳定性,即不会因为新对象的引入造成大量类之间引用的修改。它的设计思想和分层思想很像,通过引入一个中间层,将层与层之间的多对多关系变为一对多关系。不过要注意,中间层不能设计得过于复杂而变成另一种过度依赖的层。 迭代器模式,大量应用于基础类库中,对重复遍历操作进行封装。现在大部分编程语言都提供了现成的迭代器可以使用,我们不需要从零开始开发。 解释器模式,为某个语言(编程语言也是语言)定义它的语法表示,比如 if-else 语法,并定义一个解释器用来处理这个语法。 命令模式,将某个命令(函数方法)封装成对象进行传递,关注的维度是命令,比如,打开、关闭文件的命令。用于处理多个命令调用和使用远程服务的场景。另外,它还会与备忘录模式结合在一起用于撤销和重做等场景。 责任链模式,用于链条状结构,将处理请求沿链条进行传递,动态指定职责的承担对象,由各自对象实现对应职责。比如,一个请求先经过 A 拦截器处理,然后再把请求传递给 B 拦截器,B 拦截器处理完后再传递给 C 拦截器,以此类推,形成一个链条,因此也叫拦截器模式。