动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
要实现装饰者模式,要注意:
1.装饰者类要实现真实类同样的接口。
2.装饰者类内有一个真实对象的引用(通过装饰者类的构造器传入)
3.装饰类对象在主类中接受请求,将请求发送给真实的对象。
4.装饰者可以在传入真实对象后,增加以下附加功能(因为装饰对象和真实对象都有同样的方法,装饰对象可以添加一定操作在调用真实对象的方法,或者先调用真实对象的方法,再添加自己的方法)
5.不用继承
jdk中装饰模式的体现:FilterInputStream实现了InputStream,FileInputStream也实现了InputStream,因此FilterInputStream的子类BufferedInputStream(维护了字节数组提高读取效率)则可以装饰FileInputStream