定义一个抽象类Shape,它有两个抽象的方法area()和p-查字典问答网
分类选择

来自陈兴国的问题

  定义一个抽象类Shape,它有两个抽象的方法area()和perimeter(),分别表示求面积和周长.

  定义一个抽象类Shape,它有两个抽象的方法area()和perimeter(),分别表示求面积和周长.

1回答
2020-02-06 14:08
我要回答
请先登录
刘漳辉

  简单工厂模式?

  我之前做了个简易计算器的简单工厂模式,效果与你这个是一样的~~~~

  你的抽象类Shape里面的方法area()和perimeter(),可以参考的计算器的GetResult()

  都是虚方法(使用virtual关键字),然后在计算面积、周长的子类中分别重写(override关键字)就是了~~~~~~~~~

  具体的你看我的简易计算器工程模式代码:

  C#简单工厂之简易计算器

  总共三个类:Operation.csOperationFactory.csProgram.cs

  Operation.cs两个操作数,一个运算的虚方法GetResult(),该方法得出运算结果

  加减乘除四个运算类,每个类继承于Operation.cs,每个类都有一个GetResult()方法

  ,子类的GetResult()用于实现具体的加减乘除运算~~~~~~~~

  OperationFactory.cs实例化加减乘除四个运算类~~~~~

  Program.cs里面是main()调用运算类~~~~~

  Operation.cs

  usingSystem;

  usingSystem.Collections.Generic;

  usingSystem.Linq;

  usingSystem.Text;

  namespaceFactoryPattern

  {

  ///

  ///运算类

  ///

  publicclassOperation

  {

  #region运算类,包含两个操作数,一个虚的运算方法

  privatedouble_numberA=0;

  ///

  ///操作数A

  ///

  publicdoubleNumberA

  {

  get{return_numberA;}

  set{_numberA=value;}

  }

  privatedouble_numberB=0;

  ///

  ///操作数B

  ///

  publicdoubleNumberB

  {

  get{return_numberB;}

  set{_numberB=value;}

  }

  #region虚方法,得到运算结果

  publicvirtualdoubleGetResult()

  {

  doubleresult=0;

  returnresult;

  }

  #endregion

  #endregion

  }

  ///

  ///加法类:继承于运算类

  ///

  publicclassOperationAdd:Operation

  {

  publicoverridedoubleGetResult()

  {

  doubleresult=0;

  result=NumberA+NumberB;

  returnresult;

  }

  }

  ///

  ///减法类:继承于运算类

  ///

  publicclassOperationSub:Operation

  {

  publicoverridedoubleGetResult()

  {

  doubleresult=0;

  result=NumberA-NumberB;

  returnresult;

  }

  }

  ///

  ///乘法类:继承于运算类

  ///

  publicclassOperationMul:Operation

  {

  publicoverridedoubleGetResult()

  {

  doubleresult=0;

  result=NumberA*NumberB;

  returnresult;

  }

  }

  ///

  ///除法类:继承于运算类

  ///

  publicclassOperationDiv:Operation

  {

  publicoverridedoubleGetResult()

  {

  doubleresult=0;

  if(NumberB==0)

  {

  thrownewException("除数不能为零!");

  }

  else

  {

  result=NumberA/NumberB;

  returnresult;

  }

  }

  }

  #region简单工厂模式结论

  /*若要实现复杂的运算,比如开根号、自然对数、求正余弦等等,

  *只需要:

  *(1)增加相应的运算子类

  *(2)在工厂的switch子句中添加相应复杂运算的分支

  *就OK了

  */

  #endregion

  }

  OperationFactory.cs

  usingSystem;

  usingSystem.Collections.Generic;

  usingSystem.Linq;

  usingSystem.Text;

  namespaceFactoryPattern

  {

  publicclassOperationFactory

2020-02-06 14:09:48

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •