大家都知道在实际开发中,一般都不建议修改别人代码,如果想在被人的代码上面添加功能,那么就非装饰模式莫属了。
An highlighted block var foo = 'bar';
/**
* 被装饰的类
* @author Jadmin
*
*/
public class Person {
//有一个eat方法
public void eat() {
System.out.println("吃饭");
}
}
/**
* 装饰类:
* 注意:
*1. 装饰类没有无参构造
*2.要在构造器中,传入被装饰的类
* @author Jadmin
*
*/
public class SuperPerson {
private Person person;
// 构造器最中传入一个Person对象,构造器中一定要传一个被装饰的类进来
public SuperPerson(Person person) {
this.person = person;
}
//装饰,被装饰类中不完善的方法
public void superEat() {
System.out.println("喝汤");
person.eat();
System.out.println("喝茶");
}
public void eat() {
person.eat();
}
public class Test {
public static void main(String[] args) throws Exception{
SuperPerson sp = new SuperPerson(new Person());
sp.superEat();
//BufferedReader就是一个典型的装饰类,传入一个被装饰的流,
// BufferedReader bis = new BufferedReader(new FileReader(""));
// bis.readLine();
// bis.read();
}
}
调用SuperPerson的方法则必须需要传一个对象,这样就在没修改别人代码的情况下添加了新功能!
又学习到了一招!!
Jadmin个人博客:www.xxc520.cn