设计模式之策略模式

文章结构
1.策略模式
2.策略模式和工厂模式对比
3.参考文章


1.策略模式

网吧优惠活动充30赠10元,充50赠20,充100赠50,不足30该多少就是多少,这就是四种不同的算法,而策略模式将这四种算法分别封装起来,根据钱数来调用不同的算法。
策略模式就是对算法的封装,根据情况的不同调用不同的算法,将算法与和客户端分离,使算法独立于客户端之外。可以在不影响客户端的情况下更换算法。

使用场景:如果一段代码中存在很多个if-else的话(每个if代码块中是类似的算法或者为了切换不同子类),代码不但会臃肿,也会让维护工作变得更难,这时候就可以采用策略模式来进行替换。

下面是一个简单的策略模式的例子。

/**
 * 抽象类
 * @author live
 *
 */
public interface ITravel{
    void way();
}
/**
 * 具体策略类
 * @author live
 *
 */
public class TravelCarImpl implements ITravel{

    @Override
    public void way() {
        System.out.println("坐汽车出行");
    }
}
/**
 * 具体策略类
 * @author live
 *
 */
public class TravelBicycleImpl implements ITravel{

    @Override
    public void way() {
        System.out.println("骑自行车出行");
    }
}
/**
 * 上下文
 * @author live
 *
 */
public class Context{
    // 具体的策略对象
    private ITravel travel;
    // 初始化对象时放入
    public Context(ITravel travel){
        this.travel = travel;
    }
    /**
     * 策略方法
     */
    public void contextMethond(){
        travel.way();
    }
}
public class RunStrategy {
    public static void main(String[] args){
        // 创建需要的策略类
        ITravel travel = new TravelCarImpl();
        // 将策略类放入上下文
        Context context = new Context(travel);
        // 执行
        context.contextMethond();
    }
}

在上面的例子中,通过创建不同的策略对象来实现算法的替换。这种模式需要使用者知道每个类中的具体算法是什么。


2.策略模式和工厂模式对比

看完策略模式的代码之后是不是感觉和简单工厂模式类似。工厂模式是创建型模式,它接受指令,创建出符合要求的实例;而设计模式是行为型的设计模式,它接受已经创建好的实例,实现不同的行为。

简单工厂模式就是策略模式的一种,只不过是用来创建对象而已。策略模式是让对象在多种行为中选择一种。


3.参考文章

设计模式学习之策略模式
策略模式与工厂模式比较

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值