装饰模式
装饰模式的用途是不修改源程序的情况下,额外的为其添加一些逻辑.
public interface Person {
//需要重写的方法
public void say();
}
public class Teacher implements Person{
@Override
public void say() {
System.out.println("我是一名老师");
}
}
public class Decorator implements Person{
private Person person;
public Decorator(Person person){
this.person=person;
}
@Override
public void say() {
System.out.println("大家好!");
person.say();
System.out.println("请多关照!");
}
}
public class Decorator2 implements Person{
private Person person;
public Decorator2(Person person){
this.person=person;
}
@Override
public void say() {
System.out.println("微笑,挥手");
person.say();
System.out.println("再微笑,再挥手");
}
}
/**
* 测试装饰模式
* @author Administrator
*
*/
public class TestDecorator {
public static void main(String[] args) {
//正常模式
Person person=new Teacher();
person.say();
//在不修改Teacher程序的前提下,对其添加额外的逻辑.
person=new Decorator(person);
person.say();
//可以再套
person=new Decorator2(person);
person.say();
}
}