设计原则:
开放-关闭原则:类应该对扩展开放,对修改关闭。
装饰者模式的简单认知:
1)装饰者和被装饰对象有相同的超类。
2)我们可以用一个或多个装饰者包装一个对象。
3)既然装饰者和被装饰对象有相同的超类型,所以在任何需要原始对象(被包装的)的场合都可以使用装饰过的对象来代替。
4)装饰者可以在所委托被装饰者的行为之前或之后,加上自己的行为,以达到特定的目的。
5)对象可以在任何时候被装饰,所以可以在运行时动态地,不限量地用自己喜欢的装饰者来装饰对象。
装饰者模式的定义:动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的代替方案。
通常装饰者模式是采用抽象类的,但在java中可以使用接口。虽然这么说,但是当我们要使用对象的时候,该对象“已经”是一个抽象对象了,而且我们应该尽量避免修改现有代码,所以,如果抽象对象运行的好好的,就别去修改它。
装饰模式的缺点:以JAVA I/O为例,利用装饰者模式,常常会造成设计中有大量的小类,数量太多时,会造成使用此API程序员的困扰。所以在使用装饰者模式实例化组件时,会增加代码的复杂度。一旦使用装饰者模式,不仅需要实例化组件,同时还要将组件包装进装饰者中,大大增加了代码编写的难度。而且由于装饰者模式有类型上的需求问题,所以在使用装饰者模式时需要小心谨慎,因为有些代码依赖于特定的类型。
装饰者模式的使用往往是和工厂模式一块使用的,工厂模式可以起到优化装饰者模式的作用。