装饰器模式可以实现动态的给一个类添加新的职责。当然也可也通过子类来实现这一操作,但是这样的话,子类就会继承父类的方法和属性,当父类的发生改变,会影响到子类。装饰器模式会产生很多子类,后期难以维护。
public interface User {
public void sayHello();
}
public class Student implements User {
@Override
public void sayHello() {
System.out.println("我是student");
}
}
public abstract class UserDecorator implements User {
private User user;
public UserDecorator(User user){
this.user = user;
}
@Override
public void sayHello() {
user.sayHello();
}
public abstract void sayGoodBye();
}
public class StudentDecorator extends UserDecorator {
public StudentDecorator(User user) {
super(user);
}
@Override
public void sayGoodBye() {
System.out.println("再见");
}
}
public class TestDecorator {
public static void main(String[] args){
User user = new Student();
UserDecorator userDecorator = new StudentDecorator(user);
userDecorator.sayHello();
userDecorator.sayGoodBye();
}
}