- 可维护
- 可复用
- 可扩展
- 灵活性好
工厂: 用一个单独的类来做创造实例的过程。
简单运算工厂类:
package SimpleFactory;
public class OperFactory {
public static Operation createOperate(char operate)
{
Operation oper = null;
switch(operate)
{
case '+':
oper = new OperAdd();
break;
case '-':
oper = new OperSub();
break;
case '*':
oper = new OperMul();
break;
case '/':
oper = new OperDiv();
break;
}
return oper;
}
}
父类:Operation
package SimpleFactory;
public class Operation {
protected int numA ;
protected int numB ;
public int getNumA() {
return numA;
}
public void setNumA(int numA) {
this.numA = numA;
}
public int getNumB() {
return numB;
}
public void setNumB(int numB) {
this.numB = numB;
}
public int GetResult()
{
return 0;
}
}
具体的操作类:
package SimpleFactory;
public class OperAdd extends Operation{
public int GetResult()
{
int result = 0;
result = numA + numB;
return result;
}
}
package SimpleFactory;
public class OperSub extends Operation{
public int GetResult()
{
int result = 0;
result = numA - numB;
return result;
}
}
package SimpleFactory;
public class OperMul extends Operation{
public int GetResult()
{
int result = 0;
result = numA * numB;
return result;
}
}
package SimpleFactory;
public class OperDiv extends Operation{
public int GetResult()
{
int result = 0;
if(numB == 0)
try {
throw new Exception("0!!!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
result = numA / numB;
return result;
}
}
主程序:
package SimpleFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Program {
public static void main(String[] args) throws IOException
{
try
{
Scanner sc = new Scanner(System.in);
Operation oper;
System.out.println("please input number A :");
String strNumA = sc.nextLine();
System.out.println("please input mark :");
char strOperate = sc.nextLine().charAt(0);
System.out.println("please input number B :");
String strNumB = sc.nextLine();
oper = OperFactory.createOperate(strOperate);
oper.numA = Integer.valueOf(strNumA);
oper.numB = Integer.valueOf(strNumB);
System.out.println("the two nums are: " + Integer.valueOf(strNumA) + "and" +
Integer.valueOf(strNumB) + " while the mark is \"" + strOperate +"\"");
int strResult = 0;
strResult = oper.GetResult();
System.out.println("the result is : " + strResult);
}
catch(Exception ex)
{
System.out.println("you have something wrong : " + ex.getMessage());
}
}
}