您的位置:首页 > 编程语言 > Java开发

java简单工厂设计模式

2013-12-17 09:53 477 查看
工厂模式主要是为创建对象提供了接口。工厂模式按照《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);
}
}


以上是一个简单的例子,如果对工厂模式的认识还是很模糊的话,请看下一个例子(后续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: