Java 工厂模式 加 策略模式

原始业务

    @Test
    void contextLoads() {
        String name = "李四";

        if (name.equals("张三")){
            System.out.println(name+"业务1");
            System.out.println(name+"业务2");
            System.out.println(name+"业务3");
        }else if (name.equals("李四")){
            System.out.println(name+"业务5");
            System.out.println(name+"业务6");
            System.out.println(name+"业务7");
        }else if (name.equals("王五")){
            System.out.println(name+"业务8");
            System.out.println(name+"业务9");
            System.out.println(name+"业务10");
        }
    }

工厂模式去掉if判断,策略模式抽象业务方法

工厂类设计

/**
 * 工厂模式 主要实现类
 * 将 各个 抽象业务类 注册进工厂的 map中 就能获取指定业务类
 */
public class Factory1{

    public static Map<String,StrategyModel> map = new HashMap<>();

    /**
     * 将 业务方法注册进工厂 中
     * @param name
     * @param handler
     */
    public static void register(String name,StrategyModel handler){
        map.put(name,handler);
    }

    /**
     * 直接从 工厂map中获取业务类
     * @param name
     * @return
     */
    public static StrategyModel getInvoke(String name){
        return map.get(name);
    }
}

策略模式 类设计

/**
 * 策略模式主要实现 方式
 * 设计为接口, 抽象出 大类业务 的 通用方法 比如 支付 抽象出 pay 方法
 * 这里继承 InitializingBean 初始化操作,为之后工厂模式做铺垫
 * 当任何实现类实现了这个接口 必然要 实现 pay 方法 和 InitializingBean 中的初始化方法
 * 就能完成工厂的注册
 */
public interface StrategyModel extends InitializingBean {
    void pay(String name);
}

业务方法

/**
 * 业务类 实现了策略类 
 * 则必须实现 抽象出来的 pay 方法 和 InitializingBean 中的 初始化方法
 * 初始化方法 中 完成往 工厂类中注册 本业务类
 */
@Component
public class ZhangSanHandler implements StrategyModel{

    private static String name = "张三";

    @Override
    public void pay(String name) {
        System.out.println(name+"完成业务1");
        System.out.println(name+"完成业务2");
        System.out.println(name+"完成业务3");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("初始化注册了"+name);
        Factory1.register(name,this);
    }
}

最后效果

    @Test
    void test1() {

        String name = "张三";
        StrategyModel invoke = Factory1.getInvoke(name);
        invoke.pay(name);
    }

你可能感兴趣的:(自学笔记,java基础,策略模式,java,开发语言)