《策略模式》

本文介绍了策略模式的基本概念,包括环境(Context)、抽象策略(如`StatusStrategy`接口)和具体策略(如`ComponentStrategy`和`LicenseStrategy`实现),展示了如何使用策略模式根据不同场景更新数据库中的status状态值。
摘要由CSDN通过智能技术生成

策略模式

  1. 简介:策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。
  2. 核心角色:
  • 环境(Context):维护一个对策略对象的引用,负责将客户端请求委派给具体的策略对象执行。环境类可以通过依赖注入、简单工厂等方式来获取具体策略对象。
  • 抽象策略(Abstract Strategy):定义了策略对象的公共接口或抽象类,规定了具体策略类必须实现的方法。
  • 具体策略(Concrete Strategy):实现了抽象策略定义的接口或抽象类,包含了具体的算法实现。
  1. 案例:
    假设有个需求,我需要根据传参更新数据库中status状态值,可能会更新组件(conponent)表中的status值,也有可能更新License表中的status值,可以用策略模式来实现。
  • 抽象策略
package com.dhr.study.design.strategy;

public interface StatusStrategy {

    void updateStatus(Integer status);
}

  • 具体策略
package com.dhr.study.design.strategy;

public class ComponentStrategy implements StatusStrategy {
    @Override
    public void updateStatus(Integer status) {
        System.out.println("更新组件状态:status:" + status);
    }
}

package com.dhr.study.design.strategy;

public class LicenseStrategy implements StatusStrategy {
    @Override
    public void updateStatus(Integer status) {
        System.out.println("更新license状态:status:" + status);
    }
}

  • 策略上下文
package com.dhr.study.design.strategy;

public class StrategyContext {

    public StatusStrategy strategy;

    public StrategyContext(StatusStrategy strategy) {
        this.strategy = strategy;
    }

    public void executeStrategy(Integer status) {
        strategy.updateStatus(status);
    }
}

  • 测试
package com.dhr.study.design.strategy;

public class TestStrategy {

    public static void main(String[] args) {
        StrategyContext context = new StrategyContext(new ComponentStrategy());
        context.executeStrategy(1);

        StrategyContext context2 = new StrategyContext(new LicenseStrategy());
        context2.executeStrategy(0);
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值