我是靠谱客的博主 勤劳胡萝卜,最近开发中收集的这篇文章主要介绍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,带您进群互相学习
左侧小编微信,右侧获取免费资料
在这里插入图片描述

  • Java 设计模式学习代码 https://github.com/Dylan-haiji/design-pattern
  • SpringCloud学习代码: https://github.com/Dylan-haiji/javayh-cloud
  • AlibabaCloud学习代码:https://github.com/Dylan-haiji/javayh-cloud-nacos
  • SpringBoot+Mybatis 多数据源切换:https://github.com/Dylan-haiji/javayh-boot-data-soure
  • Redis、Mongo、Rabbitmq、Kafka学习代码: https://github.com/Dylan-haiji/javayh-middleware
  • SpringBoot+SpringSecurity实现自定义登录学习代码:https://github.com/Dylan-haiji/javayh-distribution

最后

以上就是勤劳胡萝卜为你收集整理的Java设计模式之工厂模式的全部内容,希望文章能够帮你解决Java设计模式之工厂模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部