(一)简单工厂模式

目标:设计一个计算器程序

思路:先定义一个操作父类,存放运算数据,抽象一个返回结果的运算方法。再用不同的操作方式(如加、减、乘、除)继承父类,各自实现运算方法。最后定义定一个工厂类,通过传入不同的运算符来实例化相应的操作类。

优点:易于拓展,当有新的操作需要实现时,只需要实现新的操作类,并在工厂类中增加实例化方法。当需要修改时,也只需要聚焦于相应的操作类,不同关心其他运算方法。

实现代码入下。
抽象父类Operation.java

public abstract class Operation {
    private double numberA;
    private double numberB;

    public double getNumberA() {
        return numberA;
    }

    public void setNumberA(double numberA) {
        this.numberA = numberA;
    }

    public double getNumberB() {
        return numberB;
    }

    public void setNumberB(double numberB) {
        this.numberB = numberB;
    }

    public abstract double getResult();
}

加法运算OperationAdd.java

public class OperationAdd extends Operation {
    @Override
    public double getResult() {
        return getNumberA() + getNumberB();
    }
}

减法运算OperationSub.java

public class OperationSub extends Operation {
    @Override
    public double getResult() {
        return getNumberA() - getNumberB();
    }
}

乘法运算OperationMul.java

public class OperationMul extends Operation {
    @Override
    public double getResult() {
        return getNumberA() * getNumberB();
    }
}

除法运算OperationDiv.java

public class OperationDiv extends Operation {
    @Override
    public double getResult() {
        if (getNumberB() == 0) {
            throw new RuntimeException("除数不能为0");
        }
        return getNumberA() / getNumberB();
    }
}

工厂类OperationFactory.java

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 class Test {
    public static void main(String[] args) throws Exception {
        Operation oper;
        double result;
        oper = OperationFactory.createOperate("+");
        oper.setNumberA(1);
        oper.setNumberB(2);
        result = oper.getResult();
        oper = OperationFactory.createOperate("/");
        oper.setNumberA(1);
        oper.setNumberB(0);
        result = oper.getResult();
    }
}

参考资料:
《大话数据结构》

posted @ 2022-11-09 19:49  DaleLee  阅读(28)  评论(0)    收藏  举报