java 简单工厂模式示例

来源:互联网 发布:mac 安装xcode 步骤 编辑:程序博客网 时间:2024/05/23 19:12

       本文举一个简单的例子,用来说明工厂模式。(实现一个加减乘除的计算器)

       抽象操作类 :

package nc.lws.factory;public abstract class AbstractOperation {private double number1;private double number2;public double getNumber1() {return number1;}public void setNumber1(double number1) {this.number1 = number1;}public double getNumber2() {return number2;}public void setNumber2(double number2) {this.number2 = number2;}public abstract double getResult();}
           加减乘除实现类

package nc.lws.factory;public class AddOperation extends AbstractOperation {@Overridepublic double getResult() {return this.getNumber1() + this.getNumber2();}}
package nc.lws.factory;public class SubOperation extends AbstractOperation {@Overridepublic double getResult() {return this.getNumber1() - this.getNumber2();}}
package nc.lws.factory;public class MutiOperation extends AbstractOperation {@Overridepublic double getResult() {return this.getNumber1() * this.getNumber2();}}
package nc.lws.factory;public class DivOperation extends AbstractOperation {@Overridepublic double getResult() {return this.getNumber1() / this.getNumber2();}}

        操作标记类:

package nc.lws.factory;public enum OperationLabel {ADD,SUB,MUTI,DIV}

        工厂类:

package nc.lws.factory;public class OperationFactory {public static AbstractOperation createOperation(OperationLabel operation) {AbstractOperation oper= null;switch(operation) {case ADD:oper = new AddOperation();break;case SUB:oper = new SubOperation();break;case MUTI:oper = new MutiOperation();break;case DIV:oper = new DivOperation();break;}return oper;}}
        客户端测试类:

package nc.lws.factory;public class ClientMain {/** * @param args */public static void main(String[] args) {AbstractOperation oper = null;//加法    oper = OperationFactory.createOperation(OperationLabel.ADD);oper.setNumber1(1);oper.setNumber2(2);System.out.println("add TEST----->" +oper.getResult());//减法    oper = OperationFactory.createOperation(OperationLabel.SUB);oper.setNumber1(1);oper.setNumber2(2);System.out.println("sub TEST----->" +oper.getResult());//乘法oper = OperationFactory.createOperation(OperationLabel.MUTI);oper.setNumber1(1);oper.setNumber2(2);System.out.println("muti TEST----->" +oper.getResult());//除法oper = OperationFactory.createOperation(OperationLabel.DIV);oper.setNumber1(1);oper.setNumber2(2);System.out.println("div TEST----->" +oper.getResult());}}

            例子虽然简单,但体现了java的三大特性:封装,继承与多态。

            封装:具体操作为各种操作类,客户端调用为客户端类

            继承:具体操作继承了抽象操作类

            多态:客户端通过调用工厂方法动态实例化各种具体操作,而具体操作类又自动向上转型为抽象操作类



0 0