java简单工厂设计模式

来源:互联网 发布:2015雾霾数据统计图 编辑:程序博客网 时间:2024/06/05 23:48

   工厂模式主要是为创建对象提供了接口。工厂模式按照《Java与模式》中的提法分为三类: 
   1. 简单工厂模式(Simple Factory) 
   2. 工厂方法模式(Factory Method) 
   3. 抽象工厂模式(Abstract Factory) 
   这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用工厂模式的两种情况: 
  1.在编码时不能预见需要创建哪种类的实例。 
  2.系统不应依赖于产品类实例如何被创建、组合和表达的细节        

  今天给大家讲一下简单工厂设计模式,首先大家先理解下面一个例子

          女娲抟土造人

          话说:“天地开辟,未有人民,女娲抟土为人。”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面。
女娲造人,这就是简单工厂模式的应用。 
  首先,在这个造人的思想里面,有几个重要的角色:女娲本身、抽象的人的概念和女娲所造出的一个个具体的人。
  1.)女娲是一个工厂类,也就是简单工厂模式的核心角色。

        2.)具休的一个个的人,包括张三,李四等。这些人便是简单工厂模式里面的具体产品角色

  3.)抽象的人是最早只存在于女娲的头脑里的一个想法,女娲按照这个想法造出的一个个具体的人,便都符合这个抽象的人的定义。换言之,这个抽象的想法规定了所有具体的人必须都有的接口(特征或者功能)
  其UML类图出下所示:

      

     下面继续给出一个运算器的代码例子,让大家更好的理解简单工厂设计模式的运用

     先构造一个运算器接口

     Operation.java

     

public class Operation {public double numberA;public double numberB;public double getResult() throws Exception{return 0;}}
      具体算法的类

     OperationAdd.java

     

public class OperationAdd extends Operation{public double getResult(){return numberA+numberB;}}
     OperationSub.java

public class OperationSub extends Operation {public double getResult()  {return numberA - numberB;}}
     OperationMul.java

public class OperationMul extends Operation{public double getResult(){return numberA * numberB;}}

    OperationDiv.java

public class OperationDiv extends Operation{public double getResult() throws Exception{if (numberB == 0) {throw new Exception("除数不能为0");}return numberA / numberB;}}

    创建一个运算工厂

    OperationFactory.java

    

public class OperationFactory { public static Operation createOperation(char operator) {      System.out.println("正在运算"+operator+"的算法...");        Operation opr = null;          switch (operator) {          case '+':              opr = new OperationAdd();              break;          case '-':              opr = new OperationSub();              break;          case '*':              opr = new OperationMul();              break;          case '/':              opr = new OperationDiv();              break;          default:              break;          }          return opr;      }  }
     UIMain.java

import java.util.Scanner;public class UIMain {   public static void main(String[] args) throws Exception{          Scanner scanner = new Scanner(System.in);                    System.out.println("请输入第一个操作数");          double numberA = scanner.nextDouble();                    System.out.println("请输入操作符");          String operator = scanner.next();                    System.out.println("请输入第二个操作符");          double numberB = scanner.nextDouble();                    char[] strChar = operator.toCharArray();                  Operation opr = OperationFactory.createOperation(strChar[0]);          opr.numberA = numberA;          opr.numberB = numberB;                    double result = opr.getResult();          System.out.println("运算结果为: " + result);      }  }

     以上是一个简单的例子,如果对工厂模式的认识还是很模糊的话,请看下一个例子(后续)


     

0 0
原创粉丝点击