GOF23之策略模式

一、核心作用:

  • 策略模式对应于解决某一个问题的算法族,允许用户从该算法中任选一个算法解决某个问题,同时可以方便的更换算法或者增加新的算法
  • 客户端决定调用哪个算法
  • 分离算法,选择实现

二、常见应用场景:

1、HttpServlet
2、GUI编程布局管理

三、命令模式的实现:

  • 公共接口(Strategy):定义所支持的算法的公共接口
  • 具体实现(ConcreteStrategy):封装了具体的算法或行为
  • Context:上下文角色,起承上启下的作用,屏蔽高层对策略、算法的直接访问,维护对Strategy对象的引用

在这里插入图片描述

四、代码示例:

一、公共接口:
package com.hezeu.strategy;

/**
* @Classname Strategy
* @Description 公共接口
* @Date 2020/2/26 下午 09:49
* @Created by 朱进博 [email protected]
*/
public interface Strategy {
        public double getPrice(double standardPrice);
}
二、具体实现类:
package com.hezeu.strategy;

/**
* @Classname OldCustomerManyStrategy
* @Description 具体实现类
* @Date 2020/2/26 下午 09:54
* @Created by 朱进博 [email protected]
*/
public class OldCustomerManyStrategy implements Strategy {
        @Override
        public double getPrice(double standardPrice) {
                System.out.println("打八折");
                return standardPrice*0.8;
        }
}
三、Context:
package com.hezeu.strategy;

/**
* @Classname Context
* @Description TODO
* @Date 2020/2/26 下午 09:56
* @Created by 朱进博 [email protected]
*/
public class Context {
        private Strategy strategy;

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

        public void setStrategy(Strategy strategy) {
                this.strategy = strategy;
        }

        public void printPrice(double s){
                System.out.println("您该报价:"+strategy.getPrice(s));
        }
}

五、策略模式的优缺点:

优点:

  • 减少了各类算法类与用户之间的耦合度
  • 算法可以自由切换
  • 扩展性良好,增加一个策略只需要实现一个接口

缺点:

  • 策略类型数量会增多,每个策略都是一个类,复用性较小
  • 所有策略类都要对外暴露

六、策略模式和简单工厂模式区别:

简单工厂模式:只需要发出命令,由他人实现
策略策略:发出命令并自己实现

Factory是直接船舰详细的对象,并用该对象取运行对应的动作
Strategy将这个操作给Context,没有创建详细对象,实现代码的进一步封装

感谢阅读,水平有限,如有错漏,还请不吝赐教
发布了26 篇原创文章 · 获赞 17 · 访问量 2904

猜你喜欢

转载自blog.csdn.net/weixin_44789225/article/details/104527587