结构型模式关注类和对象的组合,主要目的是通过继承或组合的方式来获得新的功能。
1. 适配器模式(Adapter Pattern)
将一个类的接口转换成客户希望的另外一个接口,使得原本接口不兼容的类可以一起工作。
- 使用场景:当现有类的接口与需求不符时,如将老系统接口适配新系统。
- 优点:复用已有代码,增强代码兼容性。
- 缺点:增加了系统的复杂性。
2. 桥接模式(Bridge Pattern)
将抽象部分与实现部分分离,使它们可以独立变化。
- 使用场景:当一个类具有多个维度的变化时(如设备和操作系统)。
- 优点:可以独立扩展抽象和实现部分。
- 缺点:增加了系统的理解和设计难度。
3. 组合模式(Composite Pattern)
将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
- 使用场景:当系统需要表示树形结构时,如文件系统。
- 优点:简化了客户端代码。
- 缺点:使得设计更加复杂。
4. 装饰器模式(Decorator Pattern)
动态地给对象添加新的功能,而不改变其结构。
- 使用场景:需要动态地为对象增加功能,如给窗体增加滚动条。
- 优点:灵活性高,不改变原有类的情况下扩展功能。
- 缺点:增加了系统的复杂性。
5. 外观模式(Facade Pattern)
提供一个统一的接口,来访问子系统中的一群接口,使得子系统更加容易使用。
- 使用场景:当系统复杂,且需要对外提供简化的接口时。
- 优点:简化了复杂系统的调用,降低了客户对子系统的依赖。
- 缺点:可能掩盖了子系统的真正复杂性。
6. 享元模式(Flyweight Pattern)
通过共享已经存在的对象,减少创建对象的数量,从而减少内存开销。
- 使用场景:大量相似对象存在,且内存占用大时,如文本编辑器中的字符对象。
- 优点:减少内存消耗,提高性能。
- 缺点:增加了系统复杂性。
7. 代理模式(Proxy Pattern)
为其他对象提供一种代理,以控制对这个对象的访问。
- 使用场景:远程代理、虚拟代理、保护代理等场景。
- 优点:控制访问权限,降低开销。
- 缺点:引入了间接性,增加了复杂度。