定义一个抽象类Shape,它有两个抽象的方法area()和perimeter(),分别表示求面积和周长.
定义一个抽象类Shape,它有两个抽象的方法area()和perimeter(),分别表示求面积和周长.
定义一个抽象类Shape,它有两个抽象的方法area()和perimeter(),分别表示求面积和周长.
定义一个抽象类Shape,它有两个抽象的方法area()和perimeter(),分别表示求面积和周长.
简单工厂模式?
我之前做了个简易计算器的简单工厂模式,效果与你这个是一样的~~~~
你的抽象类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