您好,登錄后才能下訂單哦!
public interface IYunSuan
{
double getResult(int num1, int num2);
}
public class jia : IYunSuan
{
public double getResult(int num1, int num2)
{
return num1 + num2;
}
}
public class jian : IYunSuan
{
public double getResult(int num1, int num2)
{
return num1-num2;
}
}
public class cheng : IYunSuan
{
public double getResult(int num1, int num2)
{
return num1*num2;
}
}
public class chu : IYunSuan
{
public double getResult(int num1, int num2)
{
if (num2 == 0) return 0;
return num1/num2;
}
}
//////////////
//簡單工廠,專門生產(chǎn)對象
public static IYunSuan createYunSuanObj(string type)
{
switch (type)
{
case "+":return new jia();
case "-": return new jian();
case "*": return new cheng();
case "/": return new chu();
}
return null;
}
//工廠方法模式,把簡單工廠分解
public interface IFactory
{
IYunSuan createYunSuanObj();
}
public class jiaFactory : IFactory
{
public IYunSuan createYunSuanObj()
{
return new jia();
}
}
public class jianFactory : IFactory
{
public IYunSuan createYunSuanObj()
{
return new jian();
}
}
public class chengFactory : IFactory
{
public IYunSuan createYunSuanObj()
{
return new cheng();
}
}
public class chuFactory : IFactory
{
public IYunSuan createYunSuanObj()
{
return new chu();
}
}
前端:
static void Main(string[] args)
{
//簡單工廠模式
//var jia=simpleFactory.createYunSuanObj("+");
//var result=jia.getResult(1,2);
//Console.WriteLine(result);
//Console.ReadLine();
//工廠方法模式
IFactory factory = new jiaFactory();
var jia=factory.createYunSuanObj();
var result=jia.getResult(1, 2);
Console.WriteLine(result);
Console.ReadLine();
}
總結(jié):定義一個創(chuàng)建對象的接口,讓子類決定實例化哪個類,工廠模式使得一個類的實例化延遲到其子類。是基于簡單工廠的擴展模式,解耦了簡單工廠的工廠類,符合了幾大原則
優(yōu)點:解耦
缺點:代碼量增加N多,讓人蛋疼。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。