前言:
簡單工廠是大話設計模式當中最簡單的一個模式,從開閉原則的角度來講簡單工廠不算是一個模式。之前使用c#寫過簡單工廠的代碼,而大話設計模式這本書使用的編程語言也是c#實現的簡單工廠。這次自己想換一個編程語言,驗證下自己有沒有真正理解簡單工廠。
代碼:**
計算類父類
public abstract class Operation {
private double _numberA=0;
public double getNumberA(){
return _numberA;
}
public void setNumberA(int numberA){
this._numberA=numberA;
}
private double _numberB=0;
public double getNumberB(){
return _numberB;
}
public void setNumberB(int numberB){
this._numberB=numberB;
}
/*計算結果*/
public abstract double getResult();
}
具體的計算類
public class OperationAdd extends Operation {
/*返回加法結果*/
public double getResult()
{
double result=0;
result=getNumberA() + getNumberB();
return result;
}
}
public class OperationDiv extends Operation{
@除法
public double getResult() {
// TODO Auto-generated method stub
double relust=0;
if(getNumberB()==0){
throw new NumberFormatException();
}
relust=getNumberA()/getNumberB();
return relust;
}
}
public class OperationMul extends Operation{
@乘法
public double getResult() {
// TODO Auto-generated method stub
double relust=0;
relust=getNumberA()*getNumberB();
return relust;
}
}
public class OperationSub extends Operation{
@減法
public double getResult() {
// TODO Auto-generated method stub
double relust=0;
relust=getNumberA()-getNumberB();
return relust;
}
}
簡單工廠
public class OperationFactory {
public static Operation createOperate(String operate){
Operation oper=null;
switch(operate)
{
case "+":
oper=new OperationAdd();
break;
case "-":
oper=new OperationSub();
break;
case "*":
oper=new OperationMul();
break;
case "/":
oper=new OperationDiv();
break;
}
return oper;
}
}
客戶端調用
public class First {
public static void main(String[] args) {
// TODO Auto-generated method stub
Operation oper;
oper=OperationFactory.createOperate("/");
oper.setNumberA(100);
oper.setNumberB(8);
double relust=oper.getResult();
System.out.print(relust);
}
}
區別:**
1 ,繼承方式
Java:使用extends 作爲關鍵字, 後面跟着父類名稱
public class OperationAdd extends Operation {}
C#:直接在類名後使用冒號調用, 後面跟着父類名稱
public class OperationAdd:Operate{}
總結:個人比較喜歡C#的繼承方式,簡單直接並且IDE做的還不錯。有智能提示,預防寫錯類名。
2 ,抽象方法的實現
Java:只要繼承了抽象方法的抽象類,在子類把抽象方法的數據類型和方法名寫對就可以重寫抽象方法。
/*返回加法結果*/
public double getResult()
{
double result=0;
result=getNumberA() + getNumberB();
return result;
}
C#:需要使用Override作爲關鍵字,來重寫抽象方法。
public override double GetResult()
{
return NumberA - NumberB;
}
3,方法的調用
Java:
在Eclipsed IDE的環境裏調用本類的方法還需要
實例化本類 才行。在其他的編輯器裏不需要(尚在證明)
C#:
在本類調用本類方法只需直接調用方法名就可以了,
不需要實例化本類。
4,屬性
Java:
public double getNumberA(){
return _numberA;
}
public void setNumberA(int numberA){
this._numberA=numberA;
}
調用:relust=getNumberA()/getNumberB();
C#:
public double NumberA
{
get { return numbera; }
set { numbera = value; }
}
調用:return NumberA / NumberB;
通過使用Java實現簡單工廠的過程當中,與C#對比出來的這4點區別!