设计模式 之 简单的工厂模式

简单工厂模式:属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式

简单工厂模式中:根据参数的不同返回不同类的实例

简单工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类

package designPattern;
/**
 * Operation 运算类:
 * 创建的实例通常都具有共同的父类
 */
public class Operation {

    private double _numberA=0;
    private double _numberB=0;

    public double get_numberA() {
        return _numberA;
    }

    public void set_numberA(double _numberA) {
        this._numberA = _numberA;
    }

    public double get_numberB() {
        return _numberB;
    }

    public void set_numberB(double _numberB) {
        this._numberB = _numberB;
    }

    public double GetResult() throws Exception {
        double result=0;
        return result;
    }
}
/**
 * 加法运算类,继承运算类
 */
class OperationAdd extends Operation{
    /**
     * 重写 Operation 运算类 的 GetResult方法
     * @return result
     */
    public double GetResult(){

        double result=0;
        result=get_numberA()+get_numberB();
        return result;
    }
}
/**
 * 减法运算类,继承运算类
 */
class OperationSub extends Operation{
    /**
     * 重写 Operation 运算类 的 GetResult方法
     * @return result
     */
    public double GetResult(){

        double result=0;
        result=get_numberA()-get_numberB();
        return result;
    }
}
/**
 * 乘法运算类,继承运算类
 */
class OperationMul extends Operation{
    /**
     * 重写 Operation 运算类 的 GetResult方法
     * @return result
     */
    public double GetResult(){

        double result=0;
        result=get_numberA()*get_numberB();
        return result;
    }
}
/**
 * 除法运算类,继承运算类
 */
class OperationDiv extends Operation{
    /**
     * 重写 Operation 运算类 的 GetResult方法
     * @return result
     */
    public double GetResult() throws Exception {

        double result=0;
        if(get_numberB()==0)
            throw new Exception("除数不能为0.");

        result=get_numberA()/get_numberB();
        return result;
    }
}
Operation父子类
package designPattern;
/**
 * 算法工厂:
 * 专门定义一个类来负责创建其他类的实例
 */
public class OperationFactory {
    public static Operation createOperate(String operate){
        Operation operation = null;
        switch (operate){
            case "+":
                operation=new OperationAdd();
                break;
            case "-":
                operation=new OperationSub();
                break;
            case "*":
                operation=new OperationMul();
                break;
            case "/":
                operation=new OperationDiv();
                break;
        }
        return operation;
    }

    public static void main(String[] args) {
        Operation operation;
        //根据参数的不同返回不同类的实例
        operation =OperationFactory.createOperate("+");
        operation.set_numberA(1);
        operation.set_numberB(2);
        try {
            double result=operation.GetResult();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
OperationFactory算法工厂和主函数

 

posted @ 2020-04-05 10:11  NOT_COPY  阅读(163)  评论(0编辑  收藏  举报