装点者模式示例,BufferedReader,BufferedWriter
装饰者模式示例,BufferedReader,BufferedWriter
class Person { void chifan() { System.out.println("chifan"); } } class SuperPerson { private Person p; SuperPerson(Person p) { this.p = p; } public void superChifan() { System.out.println("开胃酒"); p.chifan(); System.out.println("甜点"); System.out.println("来一根"); } } /* 装饰设计模式: 可以对原有对象的功能进行增强。 只要将原有对象作为参数传递给装饰类的构造函数即可。 对外提供增强方法。 通过以前所学,继承一样可以解决这个问题。 那么装饰和继承有什么区别? 继承方式增强每一个子类对象。 Writer |--FileWriter |--BufferedFileWriter。 |--MediaWriter |--BufferedMediaWriter |--DataWriter |--BufferedDataWriter 这样的设计可以完成基本需求,但是导致了继承体系的臃肿,而且子类功能的重复。 -------- class BufferedWriter { char[] BufferedWriter(FileWriter w) { } BufferedWriter(MediaWriter w) { } BufferedWriter(DataWriter w) { } public void write() { } } class BufferedWriter extends Writer { BufferedWriter(Writer w) { } public void write() { } } Writer |--FileWriter |--MediaWriter |--DataWriter |--BufferedWriter */ class PersonDemo { public static void main(String[] args) { Person p = new Person(); p.chifan(); //SuperPerson sp = new SuperPerson(p); //sp.superChifan(); } }