抽象类,功能是发放奖金,准备接受附加职责的对象
public abstract class Component {
protected String name;
protected double mon;
public Component() {}
public Component(String name, Double mon) {
this.name = name;
this.mon = mon;
}
public abstract double money();
}
被装饰的类:
public class Person extends Component {
public Person() {
super();
}
public Person(String name, double mon) {
super(name, mon);
}
@Override
public double money() {
return mon;
}
}
被装饰的类:
public class Leader extends Component {
public Leader() {
super();
}
public Leader(String name, double mon) {
super(name, mon);
}
@Override
public double money() {
return mon;
}
}
具体的装饰类,给子类添加职责:
public class Money1 extends Component {
private Component ob1;
public Money1(String name, Double mon) {
super(name, mon);
}
public Money1(Component ob1) {
super();
this.ob1 = ob1;
this.mon=this.ob1.mon;
this.name=this.ob1.name;
}
@Override
public double money() {
this.ob1.mon=ob1.money();
return this.ob1.mon;
}
}
具体的装饰类,给子类添加职责:
public class Money2 extends Component {
private Component ob2;
public Money2(Component ob2) {
super();
this.ob2 = ob2;
this.mon=this.ob2.mon;
this.name=this.ob2.name;
}
@Override
public double money() {
this.ob2.mon=2*ob2.money();
return this.ob2.mon;
}
}
为被装饰的对象分别添加职责:
public class Main {
public static void main(String[] args) {
Money1 money1=new Money1(new Person("小张",5000));
System.out.println(money1.money());
Money2 money2=new Money2(new Money1(new Leader("小李",50000)));
System.out.println(money2.money());
}
}