对象的适配模式
装饰模式
允许向一个对象添加新的功能,同时又不改变其结构。
作为现有类的一个包装
主要解决
一般的,我们为了扩展一个类经常使用继承的方式实现,由于继承为类引入静态特征,并随着扩展功能的增多,子类会很膨胀、
优点
装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承一个替代模式,装饰模式可以动态扩展一个实现类
代理模型
一个类代表另一个类的功能,为其他对象提供一种代理以控制对这个对象的访问。
缺点
由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求处理速度变慢。
实现代理模式需要额外的工作,有些代理模式实现非常复杂。
外观模型
隐藏系统的复杂性,并像客户端提供了一个客户端可以访问系统的接口。向现有的系统添加一个接口,隐藏系统的复杂性。
优点:减少系统相互依赖。提高灵活性。提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不适合。
桥接模型
是用于把抽象化与实现化解耦,使二者可以独立变化。
解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。
优点:
1.抽象和实现分离
2.优秀的扩展能力
3.实现细节对客户透明
缺点:
桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程
组合模型
用于把一组相似的对象当做一个单一的对象。组合模式依据树形结构组合对象,用来表示部分以及整体层次。这种类型设计模式属于结构型模式,它创建了对象组的树形结构。
优点:高层模块调用简单。节点自由增加。
缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则
享元模式
主要用于减少创建对象的数量,以减少内存占用和提高性能。减少对象数量从而改善应用所需的对象结构方式。
主要解决:
在有大量对象时,有可能造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回内存中已有的对象,避免重新创建。
优点
大大减少对象创建,降低系统的内存,使效率提高。
缺点
提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态变化而变化,否则会造成系统的混乱。
过滤器模式/标准模式
这种模式允许开发人员使用不同的标准来过滤一组对象,通过逻辑运算以解耦方式把它们连接起来。
优点
可以让任何两个没有关联的类一起运行。提高类的复用。增加了类透明度。灵儿性好
缺点
过多地使用适配器,会让系统非常凌乱,不易整体进行把握。
由于JAVA至多继承一个类,所以至多只能适配一个适配类