读大话设计模式之简单工厂模式

定义:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
定义中最重要的一句话就是,由一个工厂对象决定创建出哪一种产品类的实例

感觉模式挺简单的直接上代码:
首先是工厂类,我在此用反射获取的运算类父类,主要是为了消除if-else,我是想不到其他方法消除,有其他方法欢迎大家留言:

/**
 * 运算工厂
 * 
 * @author
 * @since 谷泽昊 2018年4月17日
 */
public class OperationFactory {

    /**
     * 初始化
     */
    private static final Map<String, String> map = new HashMap<String, String>() {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;

        {
            put("+", "com.gzh.OperationAdd");
            put("-", "com.gzh.OperationSub");
            put("*", "com.gzh.OperationMul");
            put("/", "com.gzh.OperationDiv");
        }
    };

    /**
     * 简单工厂模式,通过反射获取父类
     * @author 
     * @since 谷泽昊 2018年4月17日
     * @param operation
     * @return
     * @throws InstantiationException
     * @throws IllegalAccessException
     * @throws ClassNotFoundException
     */
    public static Operation createOperation(String operation) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        String oper = map.get(operation);
        if(oper!=null){
            return (Operation) Class.forName(oper).newInstance();
        }
        return null;
    }
}

然后是加法类:

/**
 * 加法运算
 * @author 
 * @since 谷泽昊 2018年4月17日
 */
public class OperationAdd extends Operation{

    @Override
    public double getResult(double numberA, double numberB) throws ArithmeticException {
        return numberA+numberB;
    }

}

减法类:

/**
 * 减法运算
 * 
 * @author
 * @since 谷泽昊 2018年4月17日
 */
public class OperationSub extends Operation {

    @Override
    public double getResult(double numberA, double numberB) throws ArithmeticException {
        return numberA-numberB;
    }

}

乘法类:

/**
 * 乘法运算
 * @author 
 * @since 谷泽昊 2018年4月17日
 */
public class OperationMul extends Operation{

    @Override
    public double getResult(double numberA, double numberB) throws ArithmeticException {
        return numberA*numberB;
    }

}

除法类:

/**
 * 减法运算
 * 
 * @author
 * @since 谷泽昊 2018年4月17日
 */
public class OperationSub extends Operation {

    @Override
    public double getResult(double numberA, double numberB) throws ArithmeticException {
        return numberA-numberB;
    }

}

最后是main方法:

public class App {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
        Operation operationAdd = OperationFactory.createOperation("+");
        try {
            System.out.println(operationAdd.getResult(1, 2));
        } catch (Exception e) {
            e.printStackTrace();
        }
        Operation operationSub = OperationFactory.createOperation("-");

        try {
            System.out.println(operationSub.getResult(1, 2));
        } catch (Exception e) {
            e.printStackTrace();
        }
        Operation operationMul = OperationFactory.createOperation("*");

        try {
            System.out.println(operationMul.getResult(1, 2));
        } catch (Exception e) {
            e.printStackTrace();
        }
        Operation operationDiv = OperationFactory.createOperation("/");

        try {
            System.out.println(operationDiv.getResult(1, 0));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

这就是简单工厂模式。

猜你喜欢

转载自blog.csdn.net/qq_29972443/article/details/79976093
今日推荐