主要的核心逻辑、功能不改变,动态的添加额外的功能、职责
一、编写一个可以任意换装的系统
核心逻辑类(不变):
public class People {
public void display() {
System.out.println("的小明");
}
}
额外功能父类:
public class Decorate extends People{
}
T恤子类:
public class Tshirt extends Decorate{
private People peo;
public void setPeo(People peo) {
this.peo = peo;
}
@Override
public void display() {
System.out.print("穿T恤-");
peo.display();
}
}
裤子子类:
public class Pants extends Decorate{
private People peo;
public void setPeo(People peo) {
this.peo = peo;
}
@Override
public void display() {
System.out.print("穿裤子-");
peo.display();
}
}
领带子类:
public class Tie extends People{
private People peo;
public void setPeo(People peo) {
this.peo = peo;
}
@Override
public void display() {
System.out.print("系领带-");
peo.display();
}
}
测试类:
public class Test {
public static void main(String[] args) {
//只穿裤子
People peo=new People();
Pants pants=new Pants();
pants.setPeo(peo);
pants.display();
//穿T恤和裤子
Tshirt tshirt=new Tshirt();
tshirt.setPeo(pants);
tshirt.display();
//系领带穿T恤和裤子
Tie tie=new Tie();
tie.setPeo(tshirt);
tie.display();
}
}
输出结果:
总结:装饰者模式的重点是装饰子类里面持有一个对象,在调用该装饰子类方法(display)的时候,同时也会去调用持有对象的方法(display),这样一层一层最终调用到最原本的核心功能