Java面试经验第一季之设计模式——装饰模式

装饰模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。

顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例。

说白了,和桥接模式、组合模式、适配器模式都比较像,只不过装饰模式中两个类,包括装饰对象类和被装饰对象类实现了同一个接口,装饰对象持有另一个对象的实例。目的就是为了解决不方便继承的类,但又需要扩展该类,所实现的一种替代方案。

应用场景

(1)在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。

(2)处理那些可以撤消的职责。

(3)当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的 子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

缺点:产生过多相似的对象,不易排错!

参与者

1.Component(被装饰对象的基类)

定义一个对象接口,可以给这些对象动态地添加职责。

2.ConcreteComponent(具体被装饰对象)

定义一个对象,可以给这个对象添加一些职责。

3.Decorator(装饰者抽象类)

维持一个指向Component实例的引用,并定义一个与Component接口一致的接口。

4.ConcreteDecorator(具体装饰者)

具体的装饰对象,给内部持有的具体被装饰对象,增加具体的职责。

Java面试经验第一季之设计模式——装饰模式

装饰模式

角色

(1)抽象组件:定义一个抽象接口,来规范准备附加功能的类

(2)具体组件:将要被附加功能的类,实现抽象构件角色接口

(3)抽象装饰者:持有对具体构件角色的引用并定义与抽象构件角色一致的接口

(4)具体装饰:实现抽象装饰者角色,负责对具体构件添加额外功能。

最近所说的几种设计模式都比较类似,这里就不多叙述了,大家记住关键点就可以了。

希望大家多多留言和关注,有什么事可直接私信我。

猜你喜欢

转载自blog.csdn.net/qq_41552245/article/details/87867576