设计模式-简单工厂模式-计算器

简单工厂模式及就是为了降低其内部的耦合,使得业务代码更加注重于业务,而且易于后期的维和。此处用一个简单的计算器实例来进行举例说明,
Operation类

package One;
/**
 * 抽象类,主要有一些所有运算共有的属性
 * @author 焦焱
 *
 */
public abstract class Operation {

    public double number_A = 0;
    public double number_B = 0;


    /**
     * 通过实现此方法来获取不同运算的结果
     * @return  结果
     */
    public abstract double GetResult();
}


/**
 * 加法类
 * @author 焦焱
 *
 */
class OperationAdd extends Operation{

    @Override
    public double GetResult() {
        return number_A+number_B;
    }

}
/**
 * 减法类
 * @author 焦焱
 *
 */
class OperationSub extends Operation{

    @Override
    public double GetResult() {
        return number_A-number_B;
    }

}
/**
 * 乘法类
 * @author 焦焱
 *
 */
class OperationMul extends Operation{

    @Override
    public double GetResult() {
        return number_A*number_B;
    }

}
/**
 * 除法类
 * @author 焦焱
 *
 */
class OperationDiv extends Operation{

    @Override
    public double GetResult() {
        if(number_B==0)
        {
            System.out.println("被除数不能为0");
            return -1;
        }
        return number_A/number_B;
    }

}



OperationFactory

/**
 * 运算工厂
 * @author 焦焱
 *
 */
public class OperationFactory {

public static Operation createOperation(String operationName)
{
    Operation oper = null;
    switch (operationName) {
    case "+":   
        oper = new OperationAdd();
        break;
    case "-":   
        oper = new OperationSub();
        break;
    case "*":   
        oper = new OperationMul();
        break;
    case "/":   
        oper = new OperationDiv();
        break;
    }
    return oper;
}
}

通过此类就可以通过运算符获取其对应的运算类
Main

public class Main {
public static void main(String[] args) {
    Operation oper;
    oper = OperationFactory.createOperation("/");
    oper.number_A=3;
    oper.number_B=4;
    System.out.println(oper.GetResult());
}
}

这样在后期扩展的时候,只需要在继承Operation 类书写一个运算类,然后在Factory里面加上一条分支即可,这样的代码易于维护,扩展,并且在扩展的时候不会影响到其他的已经写好的运算。
此代码的UML建模图为
这里写图片描述
可以看出此模式的核心在于工厂类以及,工厂加工对象他们的共有类的定义,如果可以定义一个好的基类,就可以免去大量的代码,而且使得代码的重用性,可维护性,可扩展性都大大提高。

猜你喜欢

转载自blog.csdn.net/qq_38345606/article/details/80825342