策略模式简单使用

策略接口

java 复制代码
public interface OrderStrategy {

    String getType();

    void handleOrder(Order order);

}

策略实现类

java 复制代码
public class JdOrderStrategyImpl implements OrderStrategy {
    @Override
    public String getType() {
        return "JD";
    }

    @Override
    public void handleOrder(Order order) {
        System.out.println(order.getDoSomething());
    }
}

public class PddOrderStrategyImpl implements OrderStrategy {
    @Override
    public String getType() {
        return "PDD";
    }

    @Override
    public void handleOrder(Order order) {
        System.out.println(order.getDoSomething());
    }
}

public class TaobaoOrderStrategyImpl implements OrderStrategy {
    @Override
    public String getType() {
        return "taobao";
    }

    @Override
    public void handleOrder(Order order) {
        System.out.println(order.getDoSomething());
    }
}

获取策略工厂

java 复制代码
public class OrderStrategyFactory {

    private static final Map<String, OrderStrategy> orderStrategyMap;

    static {
        orderStrategyMap = new HashMap<>();
        JdOrderStrategyImpl jdOrderStrategy = new JdOrderStrategyImpl();
        orderStrategyMap.put(jdOrderStrategy.getType(), jdOrderStrategy);
        PddOrderStrategyImpl pddOrderStrategy = new PddOrderStrategyImpl();
        orderStrategyMap.put(pddOrderStrategy.getType(), pddOrderStrategy);
        TaobaoOrderStrategyImpl taobaoOrderStrategy = new TaobaoOrderStrategyImpl();
        orderStrategyMap.put(taobaoOrderStrategy.getType(), taobaoOrderStrategy);
    }

    public static OrderStrategy getOrderStrategy(String type) {
        return orderStrategyMap.get(type);
    }

}

执行策略

java 复制代码
public class OrderStrategyService {

    private OrderStrategy orderStrategy;

    public void setOrderStrategy(OrderStrategy orderStrategy) {
        this.orderStrategy = orderStrategy;
    }

    public void doSomething(Order order) {
        if (null != order) {
            orderStrategy.handleOrder(order);
        }
    }
}

策略实体

java 复制代码
public class Order {

    private String type;

    private String doSomething;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getDoSomething() {
        return doSomething;
    }

    public void setDoSomething(String doSomething) {
        this.doSomething = doSomething;
    }
}

测试

java 复制代码
public class OrderTest {

    public static void main(String[] args) {

        List<Order> orders = new ArrayList<>();
        Order order1 = new Order();
        order1.setType("JD");
        order1.setDoSomething("jingdong");
        orders.add(order1);
        Order order2 = new Order();
        order2.setType("taobao");
        order2.setDoSomething("taobao");
        orders.add(order2);
        Order order3 = new Order();
        order3.setType("PDD");
        order3.setDoSomething("pinduoduo");
        orders.add(order3);

        OrderStrategyService orderStrategyService = new OrderStrategyService();

        for (Order order : orders) {
            OrderStrategy orderStrategy = OrderStrategyFactory.getOrderStrategy(order.getType());
            orderStrategyService.setOrderStrategy(orderStrategy);
            orderStrategyService.doSomething(order);
        }
    }

}

结果

相关推荐
D_alyoo11 分钟前
06 Activiti 与 Spring Boot 整合
java·activiti·activiti7源码
小陈不好吃15 分钟前
Spring Boot配置文件加载顺序详解(含Nacos配置中心机制)
java·开发语言·后端·spring
IT_陈寒19 分钟前
Vite性能优化实战:5个被低估的配置让你的开发效率提升50%
前端·人工智能·后端
IT_陈寒21 分钟前
Java性能调优的7个被低估的技巧:从代码到JVM全链路优化
前端·人工智能·后端
ゞ 正在缓冲99%…23 分钟前
leetcode1770.执行乘法运算的最大分数
java·数据结构·算法·动态规划
渡我白衣28 分钟前
链接的迷雾:odr、弱符号与静态库的三国杀
android·java·开发语言·c++·人工智能·深度学习·神经网络
007php00742 分钟前
大厂深度面试相关文章:深入探讨底层原理与高性能优化
java·开发语言·git·python·面试·职场和发展·性能优化
掘金安东尼1 小时前
前端周刊第439期(2025年11月3日–11月9日)
前端·javascript·vue.js
qq_334466861 小时前
excel VBA应用
java·服务器·excel
码农刚子1 小时前
ASP.NET Core Blazor进阶1:高级组件开发
前端·前端框架