设计模式总结(二):结构型设计模式

前言

设计模式几乎总是围绕**类(class)和它的实例(object)**来展开。结构型模式关注的是不同类、不同实例之间的关系。当我们开始一个项目时,要么从零开始、要么在外来类的基础上设计自己的类,特别是依赖第三方库时我们无法去修改它们的源代码。而且,我们要开始的项目大体分为两类,一类是直接的应用(application),一类是供他人使用的库(library)。因此我们在设计类时需要考虑以上因素。

适配器模式(Adapter)

适配器模式通常适用的场景往往是我们已经拥有两部分存在的不同功能的代码,而且其中一部分希望调用另一部分代码,但它们的调用接口不一致,所以我们要创建一个适配器来使调用能够进行。

它主要解决的是对已有代码的重复使用。

桥接模式(Bridge)

桥接模式使用的场景通常是我们要实现一组复杂的类,即从基类出发,根据多个维度的变量会派生出许多的子类。

桥接模式主要的做法是,每个维度设计一个类,然后每个维度的联系是通过实例的依赖实现。

它主要解决的是减少类的数目。

组合模式(Composite)

组合模式主要解决的是我们的逻辑可以以树的形式来组织的问题,即相似的类会在不同的层次出现。

装饰器模式(Decorator)

装饰器模式是对已有的类的功能的一种扩充或修改,与类的继承不同的是,装饰器类的初始化需要传入一个已有类的实例来完成,即是动态的。

外观模式 (Facade)

外观模式通常用于开发库时,我们将各个子系统(类)的接口设计成统一的接口共外部调用,这样我们就需要考虑接口的稳定性。

代理模式(Proxy)

代理模式是设置一个代理类来控制对原生类的访问、调用。

享元模式 (Flyweight)

享元模式主要是,如果一个类中的成员变量在它的大量实例中是不变的,那么就把那些不变的量单独拿出来,减少空间的使用。