Design Pattern(2)-Strategy Pattern

试想这样的场景,一个员工,在面向对象设计里,它自己维护了自己的工作时长,职位类型等成员变量,那么我们做公司管理系统时就可能希望将计算工资这个方法放在员工类里,当我们想要知道一个员工的工资,就调用这个员工的getSalary()方法。但是问题是一个员工的工资计算策略可能会变,今天他是固定工资,明天经理觉得他表现不错,就想把他改成别的工资策略了说不定。因此该场景下,Context就是一个Worker,Worker持有一个Strategy的引用。具体策略继承Strategy抽象类或者实现Strategy接口。
官方类图:
这里写图片描述
代码如下:

Strategy接口:

public interface Strategy {
    int calculateSalary();
}

A_Strategy类:

public class A_Strategy implements Strategy{

    @Override
    public int calculateSalary() {
        return 4000;
    }
}

B_Strategy类:

public class B_Strategy implements Strategy{
    private int hours;

    public B_Strategy(){
        hours=10;
    }
    @Override
    public int calculateSalary() {
        return 50*hours;
    }
}

Worker类:

public class Worker{
    Strategy strategy;

    public Worker(Strategy strategy){
        this.strategy=strategy;
    }

    public int getSalary(){
        return strategy.calculateSalary();
    }
}

main方法:

public class Main {
    public static void main(String[] args){
        Worker worker=new Worker(new A_Strategy());
        System.out.println(worker.getSalary());

        worker.setStrategy(new B_Strategy());
        System.out.println(worker.getSalary());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值