代理模式、适配器模式和装饰器模式,在实现上差别不大。几乎都是以继承、依赖或者组合的方式,将源类归入目标代理、适配和装饰类。
因此简要整理一下他们的区别。设计
- | 代理模式 | 适配器模式 | 装饰器模式 |
---|---|---|---|
解决问题 | 想在访问一个类时作一些控制 | 系统须要使用现有的类,而此类的接口不符合系统的须要。 想要创建一个能够重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在未来引进的类一块儿工做,这些源类不必定有一致的接口。 经过接口转换,将一个类插入另外一个类系中。 |
在不想增长不少子类的状况下扩展类。 |
关键代码 | 实现与被代理类组合 | 适配器继承或依赖已有的对象,实现想要的目标接口 | 在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好 |
差别 | 适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 装饰器模式为了加强功能,而代理模式是为了加以控制。 |
适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。 | 可代替继承。 |