设计模式之工厂模式

设计模式之简单工厂模式

工厂模式分为简单工厂,工厂方法,抽象工厂。今天探讨简单工厂模式

  1. 简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一 个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,属于创建型模式,但它不属于GOF,23种设计模式。
  2. 简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行 为(代码)
  3. 在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会 使用到工厂模式

业务需求:
现在登录方式分为oauth2,jwt,cas。现在有一张模板基础表叫ids_app_info,三张与之对应的模板详情表:ids_app_jwt_template、ids_app_cas_template、ids_app_oauth_template。添加一个模板的应用时会有基础数据和模板详情数据。那么,基础数据插入ids_app_info后,具体模板详情数据如何插入对应的模板表?

看简单工厂模式的实现:
先看类图:
在这里插入图片描述

1.写一个工厂类

作用是存放对象和取出对象

@Component
public class TemplateFactory {

    private ConcurrentHashMap<String, TemplateService> map = new ConcurrentHashMap<>();

    public void setTemplate(String type, TemplateService templateService) {
        map.putIfAbsent(type, templateService);
    }
    public TemplateService getTemplate(String type) {
        return map.get(type);
    }
}
2.写一个父接口和抽象类
public interface TemplateService {
    void insertTemplate(String templateStr);
}

抽象类隔开父接口与实现类的目的是为了写一些公共的方法在此。

public abstract class AbstractTemplateService implements TemplateService{

}
3. 3个实现类
@Service("idsAppCasTemplateService")
public class IdsAppCasTemplateServiceImpl extends AbstractTemplateService implements InitializingBean {

    @Resource
    private TemplateFactory templateFactory;
    @Resource
    private IdsAppCasTemplateDao casTemplateDao;

    @Override
    public void afterPropertiesSet() throws Exception {
        templateFactory.setTemplate(TemplateEnum.CAS_TEMPLATE.getCode(), this);
    }
    @Override
    public void insertTemplate(String templateStr) {
        IdsAppCasTemplateEntity casTemplateEntity = JSON.parseObject(templateStr, IdsAppCasTemplateEntity.class);
        casTemplateDao.insert(casTemplateEntity);
    }
}
@Service("idsAppJwtTemplateService")
public class IdsAppJwtTemplateServiceImpl extends AbstractTemplateService implements InitializingBean {

    @Resource
    private TemplateFactory templateFactory;
    @Resource
    private IdsAppJwtTemplateDao jwtTemplateDao;
    @Override
    public void afterPropertiesSet() throws Exception {
        templateFactory.setTemplate(TemplateEnum.JWT_TEMPLATE.getCode(),this);
    }
    @Override
    public void insertTemplate(String templateStr) {
        IdsAppJwtTemplateEntity jwtTemplateEntity = JSON.parseObject(templateStr, IdsAppJwtTemplateEntity.class);
        jwtTemplateDao.insert(jwtTemplateEntity);
    }
}
@Service("idsAppOauthTemplateService")
public class IdsAppOauthTemplateServiceImpl extends AbstractTemplateService implements InitializingBean {

    @Resource
    private TemplateFactory templateFactory;
    @Resource
    private IdsAppOauthTemplateDao oauthTemplateDao;
    @Override
    public void afterPropertiesSet() throws Exception {
        templateFactory.setTemplate(TemplateEnum.OAUTH_TEMPLATE.getCode(),this);
    }
    @Override
    public void insertTemplate(String templateStr) {
        IdsAppOauthTemplateEntity appOauthTemplate = JSON.parseObject(templateStr,IdsAppOauthTemplateEntity.class);
        oauthTemplateDao.insert(appOauthTemplate);
    }
}
4.业务需求要分支到对应实现类时如何实现的?
 @Override
    public RespResult<Void> add(AppInfoDTO appInfoDTO) {

        RespResult<Void> result = new RespResult<>();
        ServiceTemplate.executeApiService(
                getClass(),
                AppSceneEnum.API_TEACHER_ADDTEACHER,
                appInfoDTO,
                result,
                request -> {
                    IdsAppInfoEntity idsAppInfoEntity = new IdsAppInfoEntity();
                    BeanUtils.copyProperties(appInfoDTO,idsAppInfoEntity);
                    idsAppInfoMapper.insert(idsAppInfoEntity);
                    String templateType = appInfoDTO.getTemplateType();
                    //根据templateType获取对应的实现类,向上造型成父类(就是那个父接口)
                    TemplateService template = templateFactory.getTemplate(templateType);
                    //父类的对象点方法(子类是哪个实现类那么就会进入哪个实现类的方法)
                    template.insertTemplate(appInfoDTO.getTemplateStr());
                });
        return result;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神雕大侠mu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值