Java设计模式之工厂模式

1. Java设计模式之模板模式
2. Java设计模式之策略模式
3. Java设计模式之工厂模式
4. Java设计模式之装饰者模式
5.Java设计模式之单例模式
Java 设计模式源代码,欢迎star
https://github.com/Dylan-haiji/design-pattern

概念

工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。

优缺点

  • 主要优点有
    a) 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
    b) 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则。
  • 缺点是
    每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

代码演示

场景设定

工厂模式的场景设定 https://github.com/Dylan-haiji/design-pattern/tree/master/factory-mode

结构图

在这里插入图片描述

3.1 定义工厂 接口

public interface PhoneFactory {

    /**
     * @Description 创建手机工厂
     * @UserModule: design-pattern     
     * @author Dylan
     * @date 2020/2/3 0003
     * @param [phoneVO]
     * @return PhoneService
     */
    PhoneService craetePhone(PhoneVO phoneVO);
}

3.2 通用工厂实现

public class CurrencyFactory implements PhoneFactory {

    /**
     * @Description 通用
     * @UserModule: design-pattern
     * @author Dylan
     * @date 2020/2/3 0003
     * @param [phoneVO]
     * @return PhoneService
     */
    @Override
    public PhoneService craetePhone(PhoneVO phoneVO) {
        return crateFactory(phoneVO.getType());
    }

    private PhoneService crateFactory(String type){
        return Constant.HUAWEI.equalsIgnoreCase(type)? new HWServiceImpl(): new IPhoneServiceImpl();
    }
}

3.3 定义适配接口

/**
 * @author Dylan Yang
 * @Description: 手机工厂适配接口
 * @ProjectName design-pattern
 * @date 2020-02-03 12:09
 */
public interface PhoneService {

    /**
     * @Description 手机适配接口
     * @UserModule: design-pattern     
     * @author Dylan
     * @date 2020/2/3 0003
     * @param [phoneVO] 
     * @return com.javayh.dto.PhoneDTO
     */
    PhoneDTO getPhone(PhoneVO phoneVO);
}

3.4 具体的业务

@Service
public class IPhoneServiceImpl implements PhoneService {

    /**
     * @Description 苹果手机套餐
     * @UserModule: design-pattern     
     * @author Dylan
     * @date 2020/2/3 0003
     * @param [phoneVO] 
     * @return com.javayh.dto.PhoneDTO
     */
    @Override
    public PhoneDTO getPhone(PhoneVO phoneVO) {
        return PhoneDTO.builder().type(phoneVO.getType())
                .setMeal(phoneVO.getSetMeal())
                .price(Constant.SET_MEAL_I.equalsIgnoreCase(phoneVO.getSetMeal())? "2020": "3030")
                .msg(Constant.MSG).build();
    }
}

3.5 应用


    /**
     * @Description 获取手机
     * @UserModule: design-pattern
     * @author Dylan
     * @date 2020/2/3 0003
     * @param [vo]
     * @return com.javayh.result.DataResult
     */
    @PostMapping(value = "/getCurrency")
    public DataResult getCurrency(@RequestBody PhoneVO vo){
        PhoneFactory phoneFactory = new CurrencyFactory();
        PhoneService phoneService = phoneFactory.craetePhone(vo);
        return DataResult.success(phoneService.getPhone(vo));
    }

3.6 验证

通用接口验证地址 :http://localhost:8091/factory/getCurrency
在这里插入图片描述

关注 Java有货领取更多资料

联系小编。微信:372787553,带您进群互相学习
左侧小编微信,右侧获取免费资料
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小杨同学~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值