要点:多重继承,super的巧妙运用
场景:动态的给一个对象添加额外的功能
1. 被装饰的人
package com.hj.designPattern.decorate;
import lombok.Data;
@Data
public class Person {
private String name;
public void show() {
System.out.println("装饰的" + name);
}
}
2. 服饰类(装饰类),此类很关键,由被装饰的人聚合而成,覆写了父类的方法,使用了super调用了父类的同方法
package com.hj.designPattern.decorate;
public class Finery extends Person{
private Person person;
public void decorate(Person person){
this.person = person;
}
public void show(){
if(person!= null){
person.show();
}
}
}
3. 具体装饰类
package com.hj.designPattern.decorate;
public class Glasses extends Finery{
public void show(){
System.out.println("戴眼镜 ");
super.show();
}
}
package com.hj.designPattern.decorate;
public class Tshirts extends Finery{
public void show(){
System.out.println("穿白色T恤 ");
super.show();
}
}
package com.hj.designPattern.decorate;
public class Trousers extends Finery{
public void show(){
System.out.println("穿牛仔裤 ");
super.show();
}
}
package com.hj.designPattern.decorate;
public class Shoes extends Finery{
public void show(){
System.out.println("穿白色运动鞋");
super.show();
}
}
4. 测试类
package com.hj.designPattern.decorate;
public class DecorateTest {
public static void main(String[] args) {
Person person = new Person();
person.setName("赵哥");
Glasses glasses = new Glasses();
glasses.decorate(person);
Tshirts tshirts = new Tshirts();
tshirts.decorate(glasses);
Trousers trousers = new Trousers();
trousers.decorate(tshirts);
Shoes shoes = new Shoes();
shoes.decorate(trousers);
shoes.show();
}
}
参考:
(13条消息) 大话设计模式——装饰者模式_不见长安见晨雾的博客-CSDN博客https://blog.csdn.net/fengsheng5210/article/details/124006462