设计模式学习—02策略模式

策略模式

UML

策略模式

解释说明

  • 策略模式:定义多种算法,每种算法单独封装,算法之间可以相互替换。也即算法变化,使用算法的调用者不受影响。
  • 通过使用策略模式,可以通过相同的方式调用不同的算法。减少了定义算法使用算法之间的耦合。
  • 策略模式简化了单元测试,即每个算法在一个单独的类中,可以单独测试。

代码实现

  • Strategy.class
package learn02;

public abstract class Strategy {
    public abstract void AlgorithmInterface();
}
  • ConcreteStrategyA.class
package learn02;

public class ConcreteStrategyA extends Strategy {
    @Override
    public void AlgorithmInterface() {
        System.out.println("执行了算法A.");
    }
}
  • ConcreteStrategyB.class
package learn02;

public class ConcreteStrategyB extends Strategy {
    @Override
    public void AlgorithmInterface() {
        System.out.println("执行了算法B.");
    }
}
  • Context.class
package learn02;

public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void ContextInterface() {
        strategy.AlgorithmInterface();
    }
}
  • Main.class
import learn02.*;

public class Main {
    public static void main(String[] args) {
        Context context;

        context = new Context(new ConcreteStrategyA());
        context.ContextInterface();

        context = new Context(new ConcreteStrategyB());
        context.ContextInterface();
    }
}

策略模式与简单工厂模式

  • 策略模式简单工厂模式相结合,可以将耦合降得更低。
  • 举例:learn01中使用简单工厂模式,调用者需要知道简单工厂类(OperationFactory.class)和运算类(Operation.class)这两个类。
Operation operation = OperationFactory.createOperate("+");
  • 而将工厂模式的选择结合到策略模式的Context中时,调用者只需要知道Context.class一个类。
Context context = new Context("+");

参考资料

  • 大话设计模式
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值