簡單工廠模式?
我之前做了個(gè)簡易計(jì)算器的簡單工廠模式,效果與你這個(gè)是一樣的~~~~
你的抽象類Shape里面的方法area()和perimeter(),可以參考的計(jì)算器的GetResult()
都是虛方法(使用virtual 關(guān)鍵字),然后在計(jì)算面積、周長的子類中分別重寫(override關(guān)鍵字)就是了~~~~~~~~~
具體的你看我的簡易計(jì)算器工程模式 代碼:
C# 簡單工廠之簡易計(jì)算器
總共三個(gè)類:Operation.csOperationFactory.csProgram.cs
Operation.cs兩個(gè)操作數(shù),一個(gè)運(yùn)算的虛方法GetResult(),該方法得出運(yùn)算結(jié)果
加減乘除 四個(gè)運(yùn)算類,每個(gè)類繼承于Operation.cs,每個(gè)類都有一個(gè)GetResult()方法
,子類的GetResult()用于實(shí)現(xiàn)具體的加減乘除運(yùn)算~~~~~~~~
OperationFactory.cs實(shí)例化 加減乘除 四個(gè)運(yùn)算類~~~~~
Program.cs 里面是main()調(diào)用運(yùn)算類~~~~~
Operation.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FactoryPattern
{
///
/// 運(yùn)算類
///
public class Operation
{
#region 運(yùn)算類,包含兩個(gè)操作數(shù),一個(gè)虛的運(yùn)算方法
private double _numberA = 0;
///
/// 操作數(shù)A
///
public double NumberA
{
get { return _numberA; }
set { _numberA = value; }
}
private double _numberB = 0;
///
/// 操作數(shù)B
///
public double NumberB
{
get { return _numberB; }
set { _numberB = value; }
}
#region 虛方法,得到運(yùn)算結(jié)果
public virtual double GetResult()
{
double result = 0;
return result;
}
#endregion
#endregion
}
///
/// 加法類:繼承于運(yùn)算類
///
public class OperationAdd : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA + NumberB;
return result;
}
}
///
///減法類:繼承于運(yùn)算類
///
public class OperationSub : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA - NumberB;
return result;
}
}
///
/// 乘法類:繼承于運(yùn)算類
///
public class OperationMul : Operation
{
public override double GetResult()
{
double result = 0;
result = NumberA * NumberB;
return result;
}
}
///
/// 除法類:繼承于運(yùn)算類
///
public class OperationDiv : Operation
{
public override double GetResult()
{
double result = 0;
if (NumberB==0)
{
throw new Exception("除數(shù)不能為零!");
}
else
{
result = NumberA / NumberB;
return result;
}
}
}
#region 簡單工廠模式結(jié)論
/* 若要實(shí)現(xiàn)復(fù)雜的運(yùn)算,比如開根號、自然對數(shù)、求正余弦等等,
* 只需要:
* (1)增加相應(yīng)的運(yùn)算子類
* (2)在工廠的switch子句中添加相應(yīng)復(fù)雜運(yùn)算的分支
*就OK了
*/
#endregion
}
OperationFactory.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FactoryPattern
{
public class OperationFactory
{
///
/// 根據(jù)相應(yīng)的運(yùn)算符號,工廠就實(shí)例化出合適的運(yùn)算對象
///
/// 加減乘除等運(yùn)算符號
///
public static Operation createOperation(string operationType)
{
Operation operation = null;
//分別實(shí)例化具體的 加減乘除 運(yùn)算類~~~~~~~~~
switch (operationType)
{
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
case "*":
operation = new OperationMul();
break;
case "/" :
operation = new OperationDiv();
break;
default:
operation = new Operation();
break;
}
return operation;
}
}
}
Program.cs
調(diào)用~~~~~
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace FactoryPattern
{
class Program
{
static void Main(string[] args)
{
double result = 0;
string operationType = "+";
Operation oper = null;
// 【傳入運(yùn)算符,工廠實(shí)例化創(chuàng)造一個(gè)相應(yīng)的運(yùn)算對象】
oper = OperationFactory.createOperation(operationType);
oper.NumberA = 1;
oper.NumberB = 5;
// 【經(jīng)過多態(tài),返回父類的方式,實(shí)現(xiàn)計(jì)算結(jié)果】
result = oper.GetResult();
Console.WriteLine(result);
operationType = "-";
oper = OperationFactory.createOperation(operationType);
oper.NumberA = 1;
oper.NumberB = 5;
result = oper.GetResult();
Console.WriteLine(result);
operationType = "*";
oper = OperationFactory.createOperation(operationType);
oper.NumberA = 1;
oper.NumberB = 5;
result = oper.GetResult();
Console.WriteLine(result);
operationType = "/";
oper = OperationFactory.createOperation(operationType);
oper.NumberA = 1;
oper.NumberB = 5;
result = oper.GetResult();
Console.WriteLine(result);
Console.ReadKey();
}
}
}
\定義一個(gè)抽象類Shape,它有兩個(gè)抽象的方法area()和perimeter(),分別表示求面積和周長.
\定義一個(gè)抽象類Shape,它有兩個(gè)抽象的方法area()和perimeter(),分別表示求面積和周長.
數(shù)學(xué)人氣:118 ℃時(shí)間:2020-05-04 10:52:27
優(yōu)質(zhì)解答
我來回答
類似推薦
- 定義一個(gè)抽象類SHAPE,在其中聲明計(jì)算面積AREA()和周長PERINETER()方法,定義矩形類RECTANGLE和圓形類CI
- java 定義一個(gè)平面圖形類Shape及其抽象方法perimeter()和area()用于計(jì)算圖形的周長和面積.定義類Rectang
- 定義一個(gè)抽象類Shape,在其中說明一個(gè)純虛函數(shù)area()作為一個(gè)接口,用來計(jì)算圓形、三角形、正方形和長方形的面積.要求由抽象類派生出圓形、三角形、正方形和長方形4個(gè)派生類.在各派生類中分別實(shí)現(xiàn)求各個(gè)圖形的面積.
- 要求定義一個(gè)描述形狀的抽象類shape,類內(nèi)包括求面積的area和求各圖形總面積的total函數(shù).
- substract from shape area
- My father has lunch at twelve o'clock.(對劃線部分提問)劃線部分是at twelve o'clock.
- 運(yùn)動(dòng)會(huì)開幕式現(xiàn)場放飛100個(gè)藍(lán)氣球、紅氣球、黃氣球,其中紅氣球比黃氣球多2個(gè),藍(lán)氣球比黃氣球少1個(gè),三種氣球各有多少個(gè)?
- What‘s your favorite TV show怎樣回答
- jony用英文怎么讀,最好把音標(biāo)寫出來,
- 描寫舞蹈的文章
- 學(xué)校要粉刷新教室學(xué)校要粉刷新教室,已知教室的長為12米,寬為6米,高為35米,除去門窗的面積18平方米,如
- 由FeO、Fe2O3、Fe3O4組成的混合物,測得其中鐵元素與氧元素的質(zhì)量比為21:8,則這種混合物中FeO、Fe2O3、Fe3O4的物質(zhì)的量之比可能為( ) A.1:2:1 B.2:1:1 C.1:1:1 D.1:1:38
猜你喜歡
- 1《畫蛇添足》的故事中,“為蛇足者”為什么“終亡其酒”?
- 2花費(fèi)時(shí)間take和spend的區(qū)別
- 3醛可以生成醇
- 4一根鐵絲長24米,要把它圍成一個(gè)長方形,長是寬的1.4倍,這個(gè)長方形的面積是( )平方米?
- 5請教在五聲調(diào)式體系中,調(diào)號相同的調(diào)式稱為 ( ) A、同名調(diào) B、平行調(diào) C、同宮調(diào) D、同主音調(diào)
- 6圖書館有甲乙兩個(gè)書架,后來甲書添38本,乙書借出72本,這時(shí)甲架是乙架書的3倍,求甲乙書架各有書多少本?
- 7計(jì)算:1/(x+1)(x+2)+1/(x+2)(x+3)+1/(x+3)(x+4)+...+1/(x+2009)(x+2010)=1/2x+4020
- 8擴(kuò)建前的面積是605萬平方米,比擴(kuò)建后約少40分之27,擴(kuò)建后的面積約是多少萬平方米
- 9Nobody wants to eat them,__ __?怎么填
- 10a familiar visitor的意思!
- 11五年級下冊暑假作業(yè)(英語)
- 12千瓦和大卡怎么換算