策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
换句话来说,就是定义的算法有客户来选择使用。
定义的算法族,加减乘除。
使用Calculator。
public class Calculator { Algorithm algorithm; public Calculator(Algorithm algorithm){ this.algorithm = algorithm; } public Algorithm getAlgorithm() { return algorithm; } public void setAlgorithm(Algorithm algorithm) { this.algorithm = algorithm; } public float calculate(float f1, float f2){ return algorithm.calculate(f1, f2); } }
可以看出实际上Calculator是让Algorithm去计算,Calculator只是制定计算的对象。这样Calculator对计算算法的就不Care,它只关心的是让谁计算。
当然这样的扩展会更好了如果我现在要添加一个乘方的运算,那么只需要实习Algorithm算法就好了,到时候需要用到乘方的时候,让Calculator自己选择就行。
面向接口编程,封装不变的,多用组合,少用继承。