# designdemo **Repository Path**: SHIJINGSPACE/designdemo ## Basic Information - **Project Name**: designdemo - **Description**: 设计模式 策略+工厂+模版方法 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-21 - **Last Updated**: 2022-03-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: 设计模式 ## README ## 策略模式登场 首先定义一个总的接口类 ```java // 执行任务接口 public interface Handler extends InitializingBean { // 哪个人去执行任务 void executeTask(String name); } ``` ```java @Component public class KangBaHandler implements Handler { @Override public void executeTask(String name) { // 业务逻辑A System.out.println("亢八完成任务"); } @Override public void afterPropertiesSet() throws Exception { Factory.register("亢八", this); } } ``` ## 简单工厂设计模式 ```java public class Factory { private static Map strategyMap = new ConcurrentHashMap(); // 通过人员姓名多少查找对应的使用策略 public static Handler getInvokeStrategy(String name) { return strategyMap.get(name); } // 将人员和对应的使用策略注册到map里 public static void register(String name, Handler handler) { if (StringUtils.isEmpty(name) || null == handler) { return; } strategyMap.put(name, handler); } } ``` 加上工厂设计模式后,代码的变化 ```java @Test void design() { String name = "张三"; Handler strategy = Factory.getInvokeStrategy(name); strategy.executeTask(name); } ``` 大家可以看到,策略设计模式 + 工厂设计模式,让我们的代码十分简洁,唯一的缺憾就是多了一些策略类,但是非常的解耦,以上代码只是演示伪代码。在真实复杂的业务场景中,设计模式能发挥非常重要的作用。 ## 将策略注册到Map中 我们利用spring的 InitializingBean 这个接口来实现, ```java // 将人员和对应的使用策略注册到map里 public static void register(String name, Handler handler) { if (StringUtils.isEmpty(name) || null == handler) { return; } strategyMap.put(name, handler); } ```