05-结构型模式
2026/7/11大约 3 分钟
根据类的单一职责原则,一个软件系统中的每个类都应该担负一定的职责,能够完成一定的业务功能,但单个类的作用是有限的,系统中很多任务的完成需要多个类相互协作,因此需要将这些类或者类的实例进行组合。
1、结构型模式概述
结构型模式(StructuralPattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。
结构型模式可以描述两种不同的东西:类与类的实例(即对象)。根据这一点,结构型模式可以分为类结构型模式和对象结构型模式。类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系;而对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。根据合成复用原则,在系统中应当尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。
2、结构型模式简介
结构型模式主要包括如下7种模式,简记为ABCDFFP,下表对这7种设计模式进行了简单的说明。
| 模式名称 | 定义 | 简单说明 |
|---|---|---|
| 适配器模式 (Adapter) | 将一个类的接口转换成用户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 | 使原本不兼容的事物能够协同工作,而无须修改现有事物的内部结构 |
| 桥接模式 (Bridge) | 将抽象部分与实现部分分离,使它们都可以独立地变化 | 当事物存在两个独立变化的维度时,将两个变化因素抽取出来形成高层次的关联关系,使原本复杂的类继承结构变得相对简单,极大减少系统中类的个数 |
| 组合模式 (Composite) | 将对象组合成树形结构以表示“部分一整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性 | 通过面向对象技术来实现对系统中存在的容器对象和叶子对象进行统一操作,且客户端无须知道操作对象是容器还是其成员 |
| 装饰模式 (Decorator) | 动态地给一个对象添加一些额外的职责,就扩展功能而言,它比生成子类方式更为灵活 | 不使用继承而通过关联关系来调用现有类中的方法,达到复用的目的,并使得对象的行为可以灵活变化 |
| 外观模式 (Facade) | 为子系统中的一组接口提供一个统一的入口,定义一个高层接口,这个接口使得这一子系统更加容易使用 | 为复杂的子系统提供一个统一的人口,简化客户端对多个子系统的访问 |
| 享元模式 (Flyweight) | 运用共享技术有效地支持大量细粒度的对象 | 通过共享技术实现对象的重用,大幅度节约系统的内存,该模式关心系统的性能与资源利用情况 |
| 代理模式 (Proxy) | 为其他对象提供一个代理以控制对这个对象的访问 | 当不能直接访问一个对象时,通过一个代理对象间接访问它 |