继承是拓展类功能最常见的手段,但是其缺点也很明显,其耦合程度较高。这里我们介绍一种新的方法来拓展类的功能——Decorator Pattern装饰器模式,其是结构性模式的一种,通过包装的方式实现动态增强、拓展已有对象的功能
设计模式 |
---|
![]() |
简介
在 Decorator Pattern 装饰器模式下,如果我们期望拓展已有对象的功能,那么就可以通过装饰者对象来包装该这个已有对象来实现。显然这种动态的方式比继承会更加灵活。具体地,装饰者对象内部会持有被装饰对象的引用,这样装饰者对象一方面用于实现拓展的功能,另一方面其会再将请求转发给被装饰的对象。在Java的IO流中就大量使用了该模式
这里我们以奔驰车Car为例来进行引入,对于一个BenzCar对象来说,其具备的基本功能就是乞丐版的Car。但实际上不同喜好的客户可能需要添加不同的配置。比如有人要加配座椅,有人要加配影音,还有人要加运动套件。试想一下,如果用继承的方式来实现不同配料组合下的各种Car。可以想见,整个子类将会非常庞大臃肿。那么这个时候,我们就可以通过装饰器模式来优雅的解决这个问题。在装饰器模式下,其通常有以下几个角色<