设为首页 - 加入收藏 焦点技术网
热搜:java
当前位置:首页 >

java设计模式 -------- 创建模式 之 简单工厂模式

导读:       本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020              工厂模式是最常用的模式,因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a = new A(),工厂模式也是用来创建用来创建实例对象的,所以以后new时要多个心眼,是否可以考虑使用工厂模式。     ...。。。

       本文是自己学习所做笔记,欢迎转载,但请注明出处: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);}

     2.  创建加减乘除实现类:

//加法类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; }}

      3.  创建工厂类:

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; }}

     4. 最后就是测试类了:

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); }}
      

         总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。





(编辑: jesson20121020)

网友评论