設計模式-簡單工廠-Java &C#語言上的區別

前言:
簡單工廠是大話設計模式當中最簡單的一個模式,從開閉原則的角度來講簡單工廠不算是一個模式。之前使用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點區別!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章