上一篇写了关于工厂模式的博客,最后抛出了一个小问题,产品需求永远在变动,所以说用工厂方法就会有一定的局限性,接下来我们看下装饰器模式是如何解决这个问题的。
装饰器模式,听名称就是要修饰已经好的对象。比如:对于建造车,开始的时候造车是很简单的,可能有很多功能不完善,但是那个时候能造出跑的车已经是科技的很大进步了,可能开始的时候车没有空调,定时巡航,电子手刹等等,但是基本的造车是不会变的,比如造车需要四个轮子,一个方向盘,车门等等。为了把车的销量变得更高,车厂会想进一切办法给车增加新的功能,所以装饰器就解决了这个问题,毕竟设计模式多修改关闭对新增开放嘛。
装饰器类图:
首先是抽象接口类component类定义了建造车的方法。concreateComponent是实现建造车的一种品牌,Decrator装饰器继承造车方法,并且聚合父类,comcreateDecrator装饰器的实现,额外的功能都在这个类里面完成。
其实对于装饰器来说,优点可以动态的给类添加功能,不用修改原来的类。不过复用性不是很高,在比较复杂的装饰情况下,要小心装饰的层级关系,所以层级一定不要太深。