设计模式-简单工厂-Java &C#语言上的区别
【摘要】
前言: 简单工厂是大话设计模式当中最简单的一个模式,从开闭原则的角度来讲简单工厂不算是一个模式。之前使用c#写过简单工厂的代码,而大话设计模式这本书使用的编程语言也是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点区别!
文章来源: kangshihang.blog.csdn.net,作者:康世行,版权归原作者所有,如需转载,请联系作者。
原文链接:kangshihang.blog.csdn.net/article/details/106069381
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)