📌 结构型模式
结构型模式主要关心如何将类或对象组合成更大的结构。这些模式可以分为两类:
🎯 类结构型模式:
- 核心: 使用继承来组合接口或实现。
- 特点: 通过继承机制,可以使得在结构中某些类的功能可以被其他类继承或重写,形成一个层次化的类结构。
- 优点: 利于功能扩展,子类可以拓展父类的功能。
- 缺点: 耦合度相对较高,因为继承是一种强关联的结构。
🎯 对象结构型模式:
- 核心: 使用组合或聚合来组合对象。
- 特点: 通过对象的组合关系,使得对象可以形成一个大的整体,各个对象间相对独立。
- 优点: 低耦合,增加/删除对象都很方便,满足“合成复用原则”。
- 缺点: 与特定的组合结构强关联,不同的结构可能需要不同的组合方式。
⚠️ 注意: 对于系统的设计而言,组合/聚合关系比继承关系更加灵活,因为它们的耦合度较低,更易于扩展和维护。
⚡️ 4.1 代理模式
- 作用: 控制对该对象的访问
- 了解更多
- 结构:
- 📜 抽象主题 (Subject)类: 通过接口或抽象类声明真实主题和代理对象实现的业务方法。
- 📘 真实主题(Real Subject)类: 实现抽象主题中的具体业务,是代理的真实对象。
- 📙 代理(Proxy)类: 提供与真实主题相同的接口,可以访问、控制或扩展真实主题功能。
⚡️ 4.2 适配器模式
- 作用: 将一个类的接口转换成客户希望的另外一个接口
- 了解更多
- 结构:
- 🎯 目标 (Target) 接口: 当前系统业务所期待的接口,可以是抽象类或接口。
- 🔌 适配者 (Adaptee) 类: 是被访问和适配的现存组件库中的组件接口。
- 🔧 适配器(Adapter)类: 是一个转换器,让客户按目标接口格式访问适配者。
⚡️ 4.3 装饰者模式
- 作用: 在不改变现有对象结构的情况下动态地给该对象增加其它功能
- 了解更多
- 结构:
- 🖼️ 抽象构件 (Component)角色: 定义一个抽象接口以规范准备接收附加责任的对象。
- 🎨 具体构件(Concrete Component)角色: 通过装饰角色为其添加一些职责。
- 🔗 抽象装饰(Decorator)角色: 可以通过其子类扩展具体构件的功能。
- 🎀 具体装饰(ConcreteDecorator)角色: 实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。
⚡️ 4.4 桥接模式
- 作用: 用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度
- 了解更多
- 结构:
- 🔗 实现化 (Implementor) 角色(接口): 定义实现化角色的接口,供扩展抽象化角色调用。
- 📘 具体实现化(Concrete Implementor)角色: 给出实现化角色接口的具体实现。
- 📙 抽象化 (Abstraction)角色: 定义抽象类,并包含一个对实现化对象的引用。
- 📚 扩展抽象化(Refined Abstraction)角色: 是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
⚡️ 4.5 外观模式
- 作用: 通过为多个复杂的子系统提供一个一致的接口而使这些子系统更加容易被访问的模式
- 了解更多
- 结构:
- 🖼️ 外观 (Facade) 角色: 为多个子系统对外提供一个共同的接口。
- 🏢 子系统 (Sub System)角色: 实现系统的部分功能,客户可以通过外观角色访问它。
⚡️ 4.6 组合模式
- 作用: 用于把一组相似的对象当作一个单一的对象
- 了解更多
- 结构:
- 🌳 抽象根节点(Component): 定义系统各层次对象的共有方法和属性。
- 🌲 树枝节点(Composite): 组合树枝节点和叶子节点形成一个树形结构。
- 🍃 叶子节点(Leaf): 叶子节点对象,是系统层次遍历的最小单位。
⚡️ 4.7 享元模式
- 作用: 运用共享技术有效地支持大量细粒度对象的复用
- 了解更多
- 结构:
- 📘 抽象享元角色 (Flyweight): 通常是接口或抽象类,声明具体享元类的公共方法。
- 📗 具体享元(Concrete Flyweight)角色: 实现抽象享元类,结合单例模式设计。
- 📙 非享元(Unsharable Flyweight)角色: 并非所有抽象享元类子类都需要共享。
- 🏭 享元工厂 (Flyweight Factory)角色: 负责创建和管理享元角色。