大话设计模式-装饰模式的应用——分配工资问题

版权声明:Leo.All Rights Reserved. https://blog.csdn.net/qq_41113081/article/details/88829014

/**
 * @author Leo
 * @ClassName: BaseBonus
 * @Description: 所有奖金的基础类
 */
public abstract class BaseBonus {

    public BaseBonus(String name, double money) {
        this.name = name;
        this.money = money;
    }

    public BaseBonus() {
    }

    //奖金名字
    protected String name;
    //奖金基础金额
    protected double money;

    //奖金计算方法
    public abstract double CalcMethod();
}
/**
 * @ClassName: PersonalBonus
 * @Author: Leo
 * @Description: 个人奖金 被装饰的类
 * @Date: 2019/3/26 18:43
 */
public class PersonalBonus extends BaseBonus {

    public PersonalBonus() {
        super();
    }

    public PersonalBonus(String name, double money) {
        super(name, money);
    }

    @Override
    public double CalcMethod() {
        return money;
    }
}
/**
 * @ClassName: LeaderBonus
 * @Author: Leo
 * @Description: 业务主管奖金 被装饰的类
 * @Date: 2019/3/26 18:47
 */
public class LeaderBonus extends BaseBonus {

    public LeaderBonus(String name, double money) {
        super(name, money);
    }

    public LeaderBonus() {
        super();
    }

    @Override
    public double CalcMethod() {
        return money;
    }
}
/**
 * @ClassName: CalcMethod_1
 * @Author: Leo
 * @Description: 奖金的计算方法_1 是装饰类之一
 * @Date: 2019/3/26 18:56
 */
public class CalcMethod_1 extends LeaderBonus {
    private BaseBonus baseBonus;

    public CalcMethod_1(BaseBonus baseBonus) {
        this.baseBonus = baseBonus;
        this.money = this.baseBonus.money;
        this.name = this.baseBonus.name;
    }

    @Override
    public double CalcMethod() {
        //两倍工资
        this.baseBonus.money = 2 * baseBonus.CalcMethod();
        this.money = this.baseBonus.money;
        this.name = this.baseBonus.name;
        return this.baseBonus.money;
    }

    @Override
    public String toString() {
        return "CalcMethod_1{" +
                "name='" + name + '\'' +
                ", money=" + money +
                '}';
    }
}
/**
 * @ClassName: CalcMethod_2
 * @Author: Leo
 * @Description: 奖金的计算方法_2 是装饰类之一
 * @Date: 2019/3/26 18:56
 */
public class CalcMethod_2 extends BaseBonus {
    private BaseBonus baseBonus;

    public CalcMethod_2(BaseBonus baseBonus) {
        this.baseBonus = baseBonus;
        this.money = baseBonus.money;
        this.name = baseBonus.name;
    }

    @Override
    public double CalcMethod() {
        //三倍工资
        this.baseBonus.money = 3 * baseBonus.CalcMethod();
        this.money = this.baseBonus.money;
        this.name = this.baseBonus.name;
        return this.baseBonus.money;
    }

    @Override
    public String toString() {
        return "CalcMethod_2{" +
                "name='" + name + '\'' +
                ", money=" + money +
                '}';
    }
}
/**
 * @ClassName: Main
 * @Author: Leo
 * @Description:
 * @Date: 2019/3/26 19:08
 */
public class Main {
    public static void main(String[] args) {
        CalcMethod_2 calcMethod_2 =
                new CalcMethod_2(
                        new CalcMethod_1(
                                new PersonalBonus("个人工资", 100)));
        calcMethod_2.CalcMethod();
        System.out.println(calcMethod_2.toString());
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41113081/article/details/88829014
今日推荐