设计模式一 工厂模式

为什么使用工厂模式:

    工厂模式是将获取对象的实例交给工厂,由工厂根据提供的类型返回给你想要的类型,便于对对象的扩展和维护;

 常用发送验证码例子

我们常用验证码来验证用户的注册,可以使用手机验证码或者邮箱验证码、其它验证码

上一个类图

  

首先创建一个接口声明发送验证码接口

public interface SendCodeService {

    /**
     * 设置tag
     * @return
     */
    public String setTag();

    /**
     * 发送验证码
     * @param userRequestBean
     * @return
     */
    public Boolean sendCode(UserRequestBean userRequestBean);
}

创建具体要发送验证码的类

发送手机验证码

@Service("phoneSendCodeService")
public class PhoneSendCodeServiceImpl implements SendCodeService {

    @Override
    public String setTag() {
        return "phone";
    }

    @Override
    public Boolean sendCode(UserRequestBean userRequestBean) {
        return true;
    }
}

发送邮箱验证码

@Service("mailSendCodeService")
public class MailSendCodeServiceImpl implements SendCodeService {
    @Override
    public String setTag() {
        return "mail";
    }

    @Override
    public Boolean sendCode(UserRequestBean userRequestBean) {
        return true;
    }
}

其它发送验证码

@Service("otherSendCodeService")
public class OtherSendCodeServiceImpl implements SendCodeService {
    @Override
    public String setTag() {
        return "other";
    }

    @Override
    public Boolean sendCode(UserRequestBean userRequestBean) {
        return true;
    }
}

设置工厂

@Component("sendCodeServiceFactory")
public class SendCodeServiceFactory {

    @Autowired
    private List<SendCodeService> sendCodeService;

    public SendCodeService getInstance(String tag){
        Optional<SendCodeService> optional=sendCodeService.stream().filter(services -> services.setTag().equals(tag)).findFirst();
        if(optional.isPresent()){
            return optional.get();
        }else{
            log.error("command is null, please check you tag.");
            throw new IllegalArgumentException("command is null, please check you tag.");
        }
    }
}

使用

SendCodeService sendCodeService=sendCodeServiceFactory.getInstance(tag);
System.out.println(sendCodeService.sendCode(userRequestBean));

以上只是简单的工厂模式,还有抽象工厂模式,只是在工厂上增加抽象的工厂实现该工厂,道理一样;

如果再需要增加其它的发送验证码方案,则继续实现SendCodeService接口,实现接口方法,增加tag即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值