- 策略模式:其实就是一个类作为一系列类执行相同方法的东西
package strategy; public class First { public static void main(String[] args) { Strategy strategy; String a = ""; Context context = null; context = new Context(new ConcreteStrategyA()); context.AlgorithmInterface(); context = new Context(new ConcreteStrategyB()); context.AlgorithmInterface(); } } /** * 上下文类 用于创建 */ class Context { Strategy strategy; //获取 public Context(Strategy strategy) { this.strategy = strategy; } //计算方式执行 public void AlgorithmInterface() { this.strategy.AlgorithmInterface(); } } /** * 算法类 */ abstract class Strategy { //计算方式 public abstract void AlgorithmInterface(); } /** * 算法A */ class ConcreteStrategyA extends Strategy { //计算方式 public void AlgorithmInterface() { //算法A实现 } } /** * 算法B */ class ConcreteStrategyB extends Strategy { //计算方式 public void AlgorithmInterface() { //算法B实现 } }
- 与简单工厂模式合用(在需要做选择的时候)
package strategy; public class First { public static void main(String[] args) { Strategy strategy; String a = ""; Context context = new Context(a); context.AlgorithmInterface(); } } /** * 上下文类 用于创建 */ class Context { Strategy strategy; //获取 public Context(String a) { switch (a) { case "1": strategy = new ConcreteStrategyA(); break; case "2": strategy = new ConcreteStrategyB(); break; } } //计算方式执行 public void AlgorithmInterface() { this.strategy.AlgorithmInterface(); } } /** * 算法类 */ abstract class Strategy { //计算方式 public abstract void AlgorithmInterface(); } /** * 算法A */ class ConcreteStrategyA extends Strategy { //计算方式 public void AlgorithmInterface() { //算法A实现 } } /** * 算法B */ class ConcreteStrategyB extends Strategy { //计算方式 public void AlgorithmInterface() { //算法B实现 } }
- 比简单工厂模式多出来的不同:
- 简单工厂模式关注的是对象,也就是new出来的一个工具
- 策略模式关注的是行为,粗俗点说就是,new出来一个行为
- 区分简单工厂模式和策略模式的使用场景:
- 当客户端关注的是行为而不是工具的时候选择策略模式,
- 如果关注的是工具,那么就是简单工厂模式,
- 怎么区别关注点呢,就是类的功能,
- 如果这个类只有单一的功能:比如之前的加减乘除类,只有运算的功能,而且是固定的两个数字的运算,那么就完全可以使用策略模式,因为客户端关注的就是计算结果,而不是你这个工具。
- 如果这个类有很多的功能:比如电脑,有很多功能,所以new的时候就需要new出一个工具,然后根据不同的情况执行不同的方法
- 总结:根本作用,就是让客户端可以少接触一个类。条件就是这个类,功能单一,不需要对对象再进行操作了,好比最近看的一本书圣女的救赎,死者对女性的关注点就是生孩子,这个时候他就可以使用策略模式找对象,关注点就是生孩子,不是女人。
策略模式、策略模式与工厂模式相结合
最新推荐文章于 2024-07-22 11:24:57 发布