本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020
工厂模式是最常用的模式,因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a = new A(),工厂模式也是用来创建用来创建实例对象的,所以以后new时要多个心眼,是否可以考虑使用工厂模式。
简单工厂模式又可以分成三种模式:
1) 普通简单工厂模式
2) 多方法简单工厂模式
3) 多静态方法简单工厂模式
举例:(简单的四则运算)
1. 创建四则运算的共同接口:
//操作类接口 public interface Operator{ public double Operate(double d,double e); }
//加法类 public class AddOperator implements Operator{ @Override public double Operate(double a, double b) { // TODO Auto-generated method stub return a + b; } }
public class SubOperator implements Operator { @Override public double Operate(double a, double b) { // TODO Auto-generated method stub return a - b; } }
public class MulOperator implements Operator { @Override public double Operate(double a, double b) { // TODO Auto-generated method stub return a * b ; } }
public class DivOperator implements Operator { @Override public double Operate(double a, double b) { try { if(b == 0) throw new Exception("除数不能为0!"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return a / b; } }
public class OperatorFactory { public Operator createOperator(String operate){ Operator oper = null; switch(operate){ case "+" : oper = new AddOperator(); break; case "-" : oper = new SubOperator(); break; case "*" : oper = new MulOperator(); break; case "/" : oper = new DivOperator(); break; } return oper; } }
public class FactoryTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub OperatorFactory factory = new OperatorFactory(); Operator oper = factory.createOperator("*"); double result = oper.Operate(3.6,4.8); System.out.println(result); } }
在上述普通简单工厂模式中,设想这样一种状况,如果传递进来的参数是空,或者是别的不合法字符,则不能正确的创建对象,而多方法简单工厂模式则提供多个工厂方法,分别创建对象。
和普通的不同之处仅在工厂类,改动如下:
public class OperatorFactory { public Operator createAddOperator(){ return new AddOperator(); } public Operator createSubOperator(){ return new SubOperator(); } public Operator createMulOperator(){ return new MulOperator(); } public Operator createDivOperator(){ return new DivOperator(); } }这样,在测试时,就不需要传递相应的参数,只需要调用需要的工厂方法,即可:
public class FactoryTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub OperatorFactory factory = new OperatorFactory(); /*Operator oper = factory.createOperator("*");*/ Operator oper = factory.createMulOperator(); double result = oper.Operate(3.6,4.8); System.out.println(result); } }
所谓的静态方法,即将上面工厂类中的工厂方法置为静态的,不需要创建实例,直接调用即可。
public class OperatorFactory { public static Operator createAddOperator(){ return new AddOperator(); } public static Operator createSubOperator(){ return new SubOperator(); } public static Operator createMulOperator(){ return new MulOperator(); } public static Operator createDivOperator(){ return new DivOperator(); } }如上,将工厂方法设为静态的,则在测试时,直接调用即可。
public class FactoryTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //OperatorFactory factory = new OperatorFactory(); /*Operator oper = factory.createOperator("*");*/ Operator oper = OperatorFactory.createMulOperator(); double result = oper.Operate(3.6,4.8); System.out.println(result); } }
总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。
java设计模式 -------- 创建模式 之 简单工厂模式
原文地址:http://blog.csdn.net/jesson20121020/article/details/39559211