本文举一个简单的例子,用来说明工厂模式。(实现一个加减乘除的计算器)
抽象操作类 :
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 { @Override public double getResult() { return this.getNumber1() + this.getNumber2(); } }
package nc.lws.factory; public class SubOperation extends AbstractOperation { @Override public double getResult() { return this.getNumber1() - this.getNumber2(); } }
package nc.lws.factory; public class MutiOperation extends AbstractOperation { @Override public double getResult() { return this.getNumber1() * this.getNumber2(); } }
package nc.lws.factory; public class DivOperation extends AbstractOperation { @Override public 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()); } }
封装:具体操作为各种操作类,客户端调用为客户端类
继承:具体操作继承了抽象操作类
多态:客户端通过调用工厂方法动态实例化各种具体操作,而具体操作类又自动向上转型为抽象操作类
原文:http://blog.csdn.net/liwenshui322/article/details/19357805