大话设计模式一:简单工厂模式(计算器)

jopen 10年前

        定义Operation抽象类,将各种操作解耦为各个类并实现Operation抽象类,这样可以降低了各种具体操作代码耦合性。总体来说,定义一个抽象类,然后若干类继承抽象类,实现抽象方法,工厂会根据需要生成各种子类对象(多态)。

    package simple_factory;                public abstract class Operation {            private double numberA = 0;            private double numberB = 0;            public double getNumberA() {                return numberA;            }            public double getNumberB() {                return numberB;            }            public void setNumberA(double numberA) {                this.numberA = numberA;            }            public void setNumberB(double numberB) {                this.numberB = numberB;            }            public abstract double GetResult() throws Exception;                        public static void main(String[] args) throws Exception {                // TODO Auto-generated method stub                Operation oper;                oper = OperationFactory.createOperation("+");                oper.setNumberA(1);                oper.setNumberB(2);                double result = oper.GetResult();                System.out.println(result);            }        }                class OperationAdd extends Operation {            @Override            public double GetResult() {                double result = 0;                result = this.getNumberA() + this.getNumberB();                return result;            }        }                class OperationSub extends Operation {            @Override            public double GetResult() {                double result = 0;                result = this.getNumberA() - this.getNumberB();                return result;            }        }                class OperationMul extends Operation {            @Override            public double GetResult() {                double result = 0;                result = this.getNumberA() * this.getNumberB();                return result;            }        }                class OperationDiv extends Operation {            @Override            public double GetResult() throws Exception {                double result = 0;                if (this.getNumberB() == 0)                    throw new Exception("除数不能为0");                result = this.getNumberA() / this.getNumberB();                return result;            }        }                class OperationFactory {            public static Operation createOperation(String operate) {                Operation oper = null;                switch (operate)                {                    case "+":                        oper = new OperationAdd();                        break;                    case "-":                        oper = new OperationSub();                        break;                    case "*":                        oper = new OperationMul();                        break;                    case "/":                        oper = new OperationDiv();                        break;                }                return oper;            }        }  
     用一个单独的类来做创建实例的过程,这就是工厂。如果现在还需要增加各种复杂运算,比如平方根,只需要增加运算子类继承Operation抽象类,同时修改运算类工厂。