package com.leitao.demo.design;
/**
* 装饰器
* @Description: TODO
* @Author LeiTao
* @Date 2023/5/2
* @Version V1.0
**/
public class DecoratorPattern {
public static void main(String[] args) {
// Person zs = new Student("张三");
// zs.operation();
// System.out.println("\n=========================");
DecoratorA decoratorA = new DecoratorA(zs);
Person decoratorA = new DecoratorA(zs);
// zs = new DecoratorA(zs);
// zs.operation();
// System.out.println("\n=========================");
// zs = new DecoratorB(zs);
// zs.operation();
Person zs = new Student("张三");
zs = new DecoratorA(zs);
zs = new DecoratorB(zs);
zs.operation();
System.out.println("\n=========================");
//对象链
Person ls = new DecoratorB(new DecoratorA(new Student("李四")));
ls.operation();
}
}
abstract class Decorator extends Person{
protected Person person;
}
class DecoratorA extends Decorator {
public DecoratorA(Person person) {
this.person = person;
}
@Override
public void operation() {
person.operation();
System.out.print(" 写作业");
}
}
class DecoratorB extends Decorator {
public DecoratorB(Person person) {
this.person = person;
}
@Override
public void operation() {
person.operation();
System.out.print(" 考试");
}
}
abstract class Person{
protected String name;
public abstract void operation();
}
class Student extends Person {
public Student(String name){
this.name = name;
}
@Override
public void operation() {
System.out.print(name + "的职责是:学习");
}
}