策略模式

行为型模式

该模式解决了什么问题?首先请看以下的代码片段。

public class Demo {
    public String type(int i) {
        if (i == 0) return "type1";
        else if ((i == 1)) return "type1";
        else if (i == 2) return "type2";
        else return "error";
    }
}

平时我们如何调用不同的算法?

  • 常用的方法是利用if|else或者switch等。但当我们需要进行扩展时,就不可避免的需要修改源代码,这不是我们希望看到的。

策略模式则解决了上面的问题。我们可以动态的添加算法类或删除算法类,不用去修改其他源码,符合开闭原则。

那么策略模式到底长什么样子?

角色

  • 策略算法接口
  • 各种策略算法接口实现类
  • 策略上下文,其持有策略算法接口对象

简易模板

«interface» Type +type() : String Type1 Type2 Type3 Strategy -Type type +getType() : String 实现算法 实现算法 实现算法
  • 策略算法接口
public interface Type {
    String type();
}
  • 各种策略算法接口实现类
public class Type1 implements Type {
    @Override
    public String type() {
        return "type1";
    }
}

public class Type2 implements Type {
    @Override
    public String type() {
        return "type2";
    }
}

public class Type3 implements Type {
    @Override
    public String type() {
        return "type3";
    }
}
  • 策略上下文,其持有策略算法接口对象
public class Strategy {
    private Type type;

    public Strategy(Type type){
        this.type = type;
    }

    public String getType(){
        return type.type();
    }
}
  • 调用实现(其实就是多态的概念)
//在此调用Type1的算法
public class Demo {
    public static void main(String[] args) {
        Type type = new Type1();
        Strategy strategy = new Strategy(type);
        System.out.println(strategy.getType());
    }
}

结果:
type1

以上即该模式的优点,我们可以根据自己的实际应用场景确定是否使用该设计模式:策略模式。

策略模式的缺点:由于我们可以自由添加策略算法类,而不去考虑其他,我们可以很轻松的编写很多策略算法类,这些类太多导致我们可能调用这些类的时候会常常搞混类的作用,解决方案就是你需要一个好的命名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值