要点
装饰类实现被装饰类所实现的所有接口
装饰类的成员变量包含被装饰类的一个引用
在构造方法中传入被装饰类的对象
对被装饰类的功能进行升级
示例
public class WrapDemo {
/**
* @param args
* 装饰设计模式的好处是:
* 耦合性不强,被装饰的类的变化与装饰类的变化无关(比继承在某些方面好用)
*/
public static void main(String[] args) {
StudentPro sp = new StudentPro(new Student()); // 使用装饰类
sp.code();
}
}
interface Coder {
public void code();
}
// 被装饰类
class Student implements Coder {
@Override
public void code() {
System.out.println("JavaSE");
System.out.println("JavaWeb");
}
}
// 装饰类
class StudentPro implements Coder { // 1. 装饰类实现被装饰类所实现的所有接口
private Student stu; // 2. 装饰类的成员变量包含被装饰类的一个引用
public StudentPro(Student stu) { // 3. 在构造方法中传入被装饰类的对象
this.stu = stu;
}
@Override
public void code() { // 4. 对被装饰类的功能进行升级
stu.code();
System.out.println("SSM");
System.out.println("DB");
System.out.println("...");
}
}