简单工厂模式
作为一名菜鸟,当遇到某个需求时,脑海里闪现的是如何实现代码逻辑,然后就开始挥笔,用代码改变世界。
但菜鸟不会永远都是菜鸟,也有梦想,梦想着有一天变成大牛,将世界改变的更好。在变成大牛的路上,有一段叫做“设计模式”,是必经之路。
良好的代码需要有以下特点:
可维护;
可复用;
可扩展;
灵活性好;
简单工厂模式:通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。比如我是消费者,我需要不同种类的衣服,我只需要将我的需求告诉生产商,生产商就会根据我的需求进行生成。对于消费者而言,并不需要知道生产的过程。
下面通过实现简单的两位数的计算,来熟悉简单工厂模式:
1> 建立运算类:
package factorytest; /** * * @author 阿正 */ public class Operation { public double numberA; public double numberB; public double getResult(){ double result = 0; return result; } }
2> 创建具体的运算类,继承运算类:
package factorytest; /** * * @author 阿正 */ public class OperationAdd extends Operation{ @Override public double getResult() { double result = 0; result = numberA + numberB; return result; } }
package factorytest; /** * * @author 阿正 */ public class OperationSub extends Operation{ @Override public double getResult() { double result = 0; result = numberA - numberB; return result; } }
package factorytest; /** * * @author 阿正 */ public class OperationMul extends Operation{ @Override public double getResult() { double result = 0; result = numberA * numberB; return result; } }
package factorytest; /** * * @author 阿正 */ public class OperationDiv extends Operation{ @Override public double getResult() { double result = 0; try{ result = numberA / numberB; }catch(Exception x){ x.printStackTrace(); } return result; } }
3> 创建一个工厂类Factory,用于实例化不同的运算类:
package factorytest; /** * * @author 阿正 */ public class Factory { public static Operation getOperation(String operation){ Operation oper = null; switch (operation){ case "+": oper = new OperationAdd(); break; case "-": oper = new OperationSub(); break; case "*": oper = new OperationMul(); break; case "/": oper = new OperationDiv(); break; } return oper; } }
4> 创建客户端,进行不同的运算:
package factorytest; /** * * @author 阿正 */ public class FactoryTest { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here Operation oper = null; oper = Factory.getOperation("-"); oper.numberA = 1; oper.numberB = 2; double result = oper.getResult(); System.out.println(result); } }
更多关于工厂模式,参考:http://blog.csdn.net/weiwenlongll/article/details/6918164