设计模式入门:工厂方法模式

2019-12-17  本文已影响0人  happyJared

UML类图

代码示例

/**
 * 运算枚举
 */
public enum TypeEnum {

    /**
     * 加
     */
    ADD,

    /**
     * 减
     */
    SUB,;

}
/**
 * 抽象产品(计算器)
 */
public interface ICalculator {

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

}
/**
 * 具有加法运算功能的计算器
 */
public class CalculatorAdd implements ICalculator {

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

}
/**
 * 具有减法运算功能的计算器
 */
public class CalculatorSub implements ICalculator {

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

}
public interface ICalculatorFactory {

    /**
     * 获取生产某一功能的计算器工厂实例
     *
     * @return 返回生产某一功能计算器的工厂实例
     */
    ICalculator productCalculator();

}
public class CalculatorAddFactory implements ICalculatorFactory {

    /**
     * 获取具有加法运算功能的计算器实例
     *
     * @return 返回当前实例
     */
    @Override
    public ICalculator productCalculator() {
        return new CalculatorAdd();
    }

}
public class CalculatorSubFactory implements ICalculatorFactory {

    /**
     * 获取具有减法运算功能的计算器实例
     *
     * @return 返回当前实例
     */
    @Override
    public ICalculator productCalculator() {
        return new CalculatorSub();
    }

}
public class CalculatorMain {

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

        // 从抽象工厂获取生产某一功能计算器的工厂实例
        ICalculatorFactory calculatorFactory = new CalculatorSubFactory();
        // 从当前工厂获取制造某一功能的计算器实例
        ICalculator calculator = calculatorFactory.productCalculator();
        int result = calculator.compute(numberA, numberB);
        System.out.println("result = " + result);
    }

}

总结思考

  工厂方法同样也是一种创建型模式,是简单工厂模式的进一步抽象和推广。根据开闭原则,在工厂方法模式中新增功能,需要添加相应的功能类和工厂类(对扩展开放,对修改关闭),而具体的实例化则延迟到了工厂子类,并由客户端决定实例化哪一个工厂类。

  对比简单工厂,工厂方法把简单工厂内部的逻辑判断移动到了客户端,当添加功能时,原本是要改工厂类的,而现在是修改客户端。

示例代码

文章已授权转载,原文链接:设计模式入门:工厂方法模式

上一篇下一篇

猜你喜欢

热点阅读