软件设计模式——策略模式(Strategy pattern)

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

策略模式主要分为以下三个角色:
1. 环境角色(Context):持有一个策略类引用
2. 抽象策略(Strategy):定义了多个具体策略的公共接口,具体策略类中各种不同的算法以不同的方式实现这个接口;Context使用这些接口调用不同实现的算法。一般的,我们使用接口或抽象类实现。
3. 具体策略(ConcreteStrategy):实现抽象策略类中的相关的算法或操作。

这里写图片描述

//一个算法接口  
public interface Calculate {
//一个待实现方法  
    int calculate(int a,int b);
}
//一个加法策略类,实现算法接口
public class AddCalculate implements Calculate {

    @Override
    //接口方法具体实现之加法 
    public int calculate(int a, int b) {
        return a+b;
    }

}
//一个除法策略类,实现算法接口  
public class DivideCalculate implements Calculate{
    @Override
    //接口方法具体实现之除法 
    public int calculate(int a, int b) {
        return a/b;
    }
}
//一个环境角色类,持有对接口的引用  
public class EnvironmentRole {
    private Calculate cal;
    //构造方法对变量完成赋值  
    public EnvironmentRole(Calculate cal)
    {
        this.cal = cal;
    }
    //获得策略类对象 
    public Calculate getCalculate()
    {
        return cal;
    }
    //用set方法注入策略对象  
    public void setCalculate(Calculate cal)
    {
        this.cal = cal;
    }
    //环境角色中的接口方法,其具体结果依赖于策略引用指向的具体策略角色对象 
    public int calculate(int a,int b) {
        return cal.calculate(a, b);
    }
}
////一个客户端演示  
public class Client {
    public static void main(String[] args)
    {
        Calculate add = new AddCalculate();
        EnvironmentRole environmentRole = new EnvironmentRole(add);
        System.out.println(environmentRole.calculate(3, 4));

        Calculate divide = new DivideCalculate();
        EnvironmentRole environment = new EnvironmentRole(divide);
        System.out.println(environment.calculate(9, 3));


    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值