Java 工厂模式 加 模板方法模式

原有业务 同一种业务 抽象出多个业务方法,不同业务类 所需要实现的业务方法不一样

    @Test
    void test2() {

        String name = "李四";

        if (name.equals("张三")){
            System.out.println(name+"业务1");
            String work2 = name+"业务2";
        }else if (name.equals("李四")){
            System.out.println(name+"业务5");
            System.out.println(name+"业务6");
            System.out.println(name+"业务7");
        }
        
    }

工厂类设计

public class Factory2 {

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

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

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

模板方法类设计,相较于策略模式,模板方法区别在于它自身为抽象类,这样他就可以有默认实现,而业务类只需要实现自己需要的业务方法

/**
 * 相比于 策略模式 模板方法 模式 可以选择实现需要抽象的方法
 * 因为设计为抽象类 有默认的实现方法 继承了这个抽象类的业务类
 * 只需实现自身需要实现的业务,不需要的业务交给抽象类的默认方法
 * 如果实现了业务类中不需要的方法 根据 对象的多态性 则会调用 模板类中的 默认实现方法 抛出异常
 */
public abstract class TemplateModel implements InitializingBean {

    public void pay(String name){
        throw new UnsupportedOperationException();
    }

    public String callBack(){
        throw new UnsupportedOperationException();
    }
}

两个业务类

@Component
public class LiSiHandler extends TemplateModel{
    private static String name = "李四";

    @Override
    public String callBack() {
        return name+"业务2";
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Factory2.register(name,this);
    }
}

-----------------------------------------------------------------------------

@Component
public class ZhangSanHandler2 extends TemplateModel{

    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 {
        Factory2.register(name,this);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值