前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式入门:简单工厂模式

设计模式入门:简单工厂模式

作者头像
happyJared
发布2018-09-20 09:49:11
3910
发布2018-09-20 09:49:11
举报
文章被收录于专栏:happyJaredhappyJared

UML类图

简单工厂模式
简单工厂模式

简单工厂模式

代码示例

  • 定义运算枚举
代码语言:javascript
复制
/**
 * 运算枚举
 */
public enum TypeEnum {

    /**
     * 加
     */
    ADD,

    /**
     * 减
     */
    SUB,;

}
  • 定义抽象产品类,包含一个抽象方法
代码语言:javascript
复制
/**
 * 抽象产品(计算器)
 */
public interface ICalculator {

    /**
     * 计算numberA和numberB并返回操作结果
     *
     * @param numberA
     * @param numberB
     * @return 操作结果
     */
    int compute(int numberA, int numberB);

}
  • 产品A,继承了抽象产品类并实现其定义的方法
代码语言:javascript
复制
/**
 * 具有加法运算功能的计算器
 */
public class CalculatorAdd implements ICalculator {

    /**
     * 将两个数进行加法运算
     *
     * @param numberA
     * @param numberB
     * @return 相加结果
     */
    @Override
    public int compute(int numberA, int numberB) {
        return numberA + numberB;
    }

}
  • 产品B,继承了抽象产品类并实现其定义的方法
代码语言:javascript
复制
/**
 * 具有减法运算功能的计算器
 */
public class CalculatorSub implements ICalculator {

    /**
     * 将两个数进行减法运算
     *
     * @param numberA
     * @param numberB
     * @return 相减结果
     */
    @Override
    public int compute(int numberA, int numberB) {
        return numberA - numberB;
    }

}
  • 工厂类,用于获取相应的产品
代码语言:javascript
复制
/**
 * 简单工厂
 */
public class CalculatorFactory {

    /**
     * 根据操作指令获取计算器操作对象
     *
     * @param type 操作指令
     * @return 具有某一功能的计算器
     */
    public static ICalculator calculate(TypeEnum type) {
        ICalculator calculator = null;
        switch (type) {
            case ADD:
                calculator = new CalculatorAdd();
                break;
            case SUB:
                calculator = new CalculatorSub();
                break;
            default:
                break;
        }
        return calculator;
    }

}
  • 客户端测试
代码语言:javascript
复制
public class CalculatorMain {

    public static void main(String[] args) {
        int numberA = 23;
        int numberB = 18;

        // 从简单工厂获取任意拥有某一功能的计算器
        ICalculator calculate = CalculatorFactory.calculate(TypeEnum.ADD);
        if (Objects.nonNull(calculate)) {
            int result = calculate.compute(numberA, numberB);
            System.out.println("result = " + result);
        }
    }

}

总结思考

  简单工厂是一种创建型模式。根据开闭原则推导,在简单工厂模式应用中新增功能,需要添加相应的子类(对扩展开放,但同时也对修改开放了),并修改核心工厂类的相应方法(增加分支判断),具体的实例化延迟到了客户端进行选择,对于客户端来说,这去除了其与具体产品的直接依赖。

示例代码

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • UML类图
  • 代码示例
  • 总结思考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档