策略模式

策略模式

一、概念

策略模式英文名为Strategy,它定义了一个算法家族,主要对各种不同的算法进行封装。与简单工厂模式很类似,策略模式对每个算法有一个基类,每个算法都实现或继承该基类,当需要增加某个算法的时候只需增加对应的算法实现类即可。与工厂模式不同在于用户不需要知道具体的算法实现类就可以使用具体某个算法。简单类图如下:
这里写图片描述

二、具体代码

抽象策略接口

public interface IStrategy {

   void algorithmStrategy();

}

策略A

public class StrategyA implements IStrategy{
    @Override
    public void algorithmStrategy() {
        System.out.println("算法A。。。。");
    }
}

策略B

public class StrategyB implements IStrategy{
    @Override
    public void algorithmStrategy() {
        System.out.println("算法B。。。。");
    }
}

策略上下文

public class StrategyContext {

    private IStrategy mStrategy;

    public StrategyContext(String strategyType) {
        generateStrategy(strategyType);
    }

    private void generateStrategy(String strategyType){
        switch (strategyType){
            case "StrategyA":
                mStrategy = new StrategyA();
            case "StrategyB":
                mStrategy = new StrategyB();
        }
    }


    public void algorithmStrategy(){
        if(this.mStrategy != null){
            this.mStrategy.algorithmStrategy();
        }
    }

}

客户端代码

public class TestMain {

    public static void main(String[] args){
        StrategyContext strategyContext = new StrategyContext("StrategyA");
        strategyContext.algorithmStrategy();
    }

}
总结
优点

1、策略模式封装了变化,增加不同的算法,对用户是透明的;

2、便于写单元测试

缺点

1、和工厂模式类似,没当增加一种策略或算法,不仅增加对应的算法类,还需修改StrategyContext类,当然可以通过反射解决此问题,这就后话了。

参考资料

《大话设计模式》

https://blog.csdn.net/u012124438/article/details/70039943

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值