适配器模式,包括3种,针对类的适配器、针对对象的适配器、针对接口的适配器,其中针对对象的适配器是关键由于它能够理解为其余结构性模式的基础。下面分别进行说明设计模式
类的适配器函数
要点:3个主要元素,source类(待适配)、adapter、目标接口 Targetable ,adapter继承source,实现Targetable。设计
对象的适配器代理
要点:3个主要元素,source类(待适配)、adapter、目标接口 Targetable,adapter实现Targetable,包含一个source的实例。对象
接口的适配器继承
要点:一个已经存在的interface,我只须要用到该interface当中的部分方法,这个时候能够写一个abstract类,实现interface的全部方法,而后用个人类去继承该abstract类,实现我须要用的方法便可。接口
难易程度:比较简单get
普遍程度:比较普遍table
装饰者模式基础
要点:一个interface,一个Source类,一个 Decorator 类, 都实现这个接口,在Decorator 的构造函数当中传入一个Source的实例,在他们的同名方法当中,Decorator 的实现会比Source的实现多了一些操做。
难易程度:比较简单
普遍程度:通常
代理模式
要点:一个interface,一个Source类,一个 Proxy类, 都实现这个接口,在Proxy的构造函数当中new一个Source的实例,在他们的同名方法当中,Proxy的实现会比Source的实现多了一些操做。
难易程度:比较简单
普遍程度:比较普遍
在这里,咱们能够比较一下装饰者模式和代理模式,其实他们是很像的,区别只是,对于client而言,我知道Decorator修饰的是哪一个类,而不知道Proxy代理的到底是谁。
而装饰者模式和对象的适配器模式也很像,区别只是source和adapter不实现同一接口,而source和Decorator 实现同一接口。
因此,从语义上来说,适配器,是为了让本来不合用的东西,可以为咱们现行系统所用,而装饰者只是为了加强某些现有方法的功能。
外观模式
要点:用一个Facade类,把若干个类组合在一块儿。
典型场景:其实这样的作法,即便你彻底不了解设计模式,仍是会常常用到的。
难易程度:很简单
普遍程度:很是普遍
桥接模式
要点:把抽象的概念和具体的行为分离开来。
典型场景:若是咱们须要对一个概念进行多维的划分,若是采用继承的方式,可能会出现多层的继承关系, 而把抽象的概念和具体的行为分离开来,会极大的简化咱们的代码。
难易程度:理解起来较为困难
普遍程度:比较普遍
组合模式
要点:二叉树、链表等
典型场景:二叉树、链表
难易程度:具体的应用比较困难
普遍程度:很是普遍
享元模式
要点:多与工厂模式一块儿使用,在须要使用一个类对象的时候,并非直接建立,而是从共享池当中查找有没有可用的,若是没有,建立,若是有,直接拿过来用
典型场景:链接池
难易程度:实现较困难
普遍程度:比较普遍