设计模式之策略模式

1、什么是策略模式

将类中经常改变或者可能改变的部分提取作为一个抽象策略接口类,然后在类中包含这个对象的实例,这样类实例在运行时就可以随意调用实现了这个接口的类的行为

比如定以一系列的算法,把每一个算法封装起来,并且使可以相互替换,使得算法可独立于使用它的客户而变化,这就是策略模式

1、环境类(Context):通过ConcreteStrategy具体策略来配置,持有Strategt对象并维护对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据

2、抽象策略类(Strategy):定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法

3、具体策略(ConcreteStrategy):Strategy接口的具体算法

2、代码

促销活动

环境类

java 复制代码
public class CuXiaoContext {

    private CuXiao cuXiao;

    public CuXiaoContext(CuXiao cuXiao) {
        this.cuXiao = cuXiao;
    }
    //定义一个使用算法的方法
    public void use(){
        cuXiao.cuxiao();
    }
}

抽象策略类

java 复制代码
public interface CuXiao {
    void cuxiao();
}

具体策略类

6.18

java 复制代码
public class SuanFa618 implements CuXiao {

    @Override
    public void cuxiao() {
        System.out.println("使用6.18的促销算法");
    }
}

11.11

java 复制代码
public class SuanFa1111 implements CuXiao{

    @Override
    public void cuxiao() {
        System.out.println("使用11.11的促销算法");
    }
}

测试

java 复制代码
public class CuXiaoTest {

    public static void main(String[] args) {
        //SuanFa618 suanFa618 = new SuanFa618();
        SuanFa1111 suanFa1111 = new SuanFa1111();
        CuXiaoContext context = new CuXiaoContext(suanFa1111);
        context.use();
    }
}

3、策略模式优缺点

优点:

1、算法可以自由切换(策略类自由切换)

2、避免使用多重条件判断

3、扩展性良好 (符合开闭原则)

缺点:

1、策略类会增多(导致类爆炸)

2、所有策略类都需要对外暴露

3、客户端必须知道所有的策略类,才确定要调用的策略类

4、策略模式使用场景

1、如果在以一个系统里面又许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为

2、一个系统需要动态地在几种算法中选择一种

3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现

相关推荐
岭南灯火12 小时前
前端通用交互式几何编辑器的开发经验
前端·设计模式·架构
岭南灯火12 小时前
前端通用交互式几何编辑器的设计法则 7 - 设计模式与原则
前端·设计模式·架构
岭南灯火12 小时前
前端通用交互式几何编辑器的设计法则 4 - 绘制、悬停与编辑
前端·设计模式·架构
岭南灯火13 小时前
前端通用交互式几何编辑器的设计法则 6 - 配套设施与工程化
前端·设计模式·架构
岭南灯火13 小时前
前端通用交互式几何编辑器的设计法则 5 - 辅助元素的设计
前端·设计模式·架构
日暮南城故里1 天前
装饰器模式深度解析:从Java IO流源码到实战应用
java·设计模式·装饰器模式
莫得感情 o1 天前
设计模式 13 · 桥接模式
java·设计模式·桥接模式
workflower1 天前
全球云计算产业发展态势-市场:云计算规模保持稳步增长,产业格局日趋明晰
人工智能·深度学习·机器学习·设计模式·机器人·云计算
做前端的娜娜子3 天前
从 0 到 1 打造一个配置可视化后台:一次前端配置中心化改造的实战复盘
前端·设计模式·数据可视化