设计模式-简单工厂-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点区别!

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