常见设计模式

创建型模式

• 工厂模式 :定义一个用于创建对象的接口,但让子类决定实例化哪一个类。它的优点是将对象的创建和使用分离,符合开闭原则,但会增加系统复杂度。

• 抽象工厂模式 :提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。优点是将具体类的创建推迟到子类,使系统易于扩展新类型,但系统会变得复杂,且新产品类不利于扩展。

• 建造者模式 :将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。优点是可以在建造过程中使用相同的构建过程,但会导致系统中出现大量具体建造类。

• 原型模式 :用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。优点是复制对象比创建新对象更高效,但需要为每种原型实现克隆方法,且当类的构造函数比较复杂时不能使用。

• 单例模式 :保证一个类仅有一个实例,并提供一个访问它的全局访问点。优点是无法通过 new 创建多个实例,但无法灵活地控制单例类的创建位置。

结构型模式

• 适配器模式 :将一个类的接口转换成另一个接口,使得原本由于接口不兼容而不能一起工作的类可以协作。优点是明确了接口转换的意图,但会增加类的数量。

• 桥接模式 :将抽象部分与它的实现部分分离,使它们可以独立地变化。优点是抽象和实现可以独立扩展,但会增加类的数量。

• 装饰模式 :允许动态地给对象添加一些额外的职责,而无须改变原有对象的结构。优点是灵活、动态地为对象添加功能,但可能会产生大量小对象。

• 组合模式 :将对象组合成树形结构以表示"部分 - 整体"的层次结构,使得用户可以以一致的方式处理单个对象和组合对象。优点是统一单个和组合对象的处理,但会增加类的数量。

• 外观模式 :为子系统中的一组接口提供一个统一的外部接口,使得子系统更容易使用。优点是简化了用户与子系统的交互,但会增加设计复杂度。

• 享元模式 :运用共享技术有效地支持大量细粒度的对象。优点是节省内存,但会增加共享对象的复杂度。

• 代理模式 :为其他对象提供一种代理以控制对这个对象的访问。优点是更灵活地控制对对象的访问,但会影响性能。

行为型模式

• 策略模式 :定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。优点是算法可以自由切换,但会增加类和对象的数量。

• 模板方法模式 :定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。优点是将不变部分和可变部分的代码分离,但会增加子类数量。

• 命令模式 :将一个请求封装为一个对象,从而使用户可以用不同的请求对客户进行参数化。优点是灵活的请求处理方式,但会增加类的数量。

• 迭代器模式 :提供一种顺序访问聚合对象元素的方法,而不暴露其内部的表示。优点是提供了统一的遍历方式,但会增加类的数量。

• 观察者模式 :定义对象之间的一对多依赖关系,当其中一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。优点是实现了主题与观察者的松耦合,但可能会导致响应链过长。

• 中介者模式 :用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用,从而使其耦合松散。优点是降低了对象之间的耦合,但中介者会变得复杂。

• 备忘录模式 :在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。优点是很好地保存和管理了对象的状态,但可能会消耗大量资源。

• 状态模式 :允许一个对象在其内部状态改变时改变它的行为,看起来好像改变了它的类。优点是将状态转换显示化,但会增加类和对象的数量。

• 访问者模式 :表示一个作用于某对象结构中的各元素的操作,使得用户可以在不改变各元素的类的前提下定义作用于这些元素的新操作。优点是增加了新的操作而无须修改类,但很难修改元素的层次结构。

相关推荐
hope_wisdom1 小时前
实战设计模式之备忘录模式
设计模式·系统架构·软件工程·备忘录模式·架构设计
xxy!1 小时前
Spring 框架中用到的设计模式
java·spring·设计模式
Leaf吧1 小时前
java 设计模式 原型模式
java·设计模式·原型模式
歡進2 小时前
🔥 每个故事都是一种设计模式
前端·javascript·设计模式
Auroral1567 小时前
结构型模式:适配器模式
设计模式
callJJ8 小时前
多线程编程的简单案例——单例模式[多线程编程篇(3)]
java·jvm·设计模式·面试·java-ee·软件工程·个人开发
渊渟岳10 小时前
开源项目YtyMark文本编辑器--UI界面相关功能(关于设计模式的实战运用)
java·设计模式
A.lways14 小时前
【软考-系统架构设计师】设计模式三大类型解析
设计模式·系统架构