最近開始看點設計模式,由於我這人腦袋有點笨所以簡單工廠模式也是看了幾遍才慢慢領悟點意思出來。所以在這裏記錄下來好日後翻閱。
簡單工廠模式又叫做靜態工廠方法(StaticFactory Method)模式,簡單的來說就是利用一個工廠類來操作處理返回實例化對象。這個工廠就像一個小工廠一樣來生產會產品。
下面是簡單工廠模式的UML圖:
從上圖可以看出類Product_A 和類Product_B都繼承自基類IProduct並實現基類裏的方法(實現出來的這個方法當然是不一樣的)。而工廠類Creator的作用就是根據請求的不一樣返回不一樣的產品類實例化對象,及返回Product_A或Product_B的一個實例化對象。
下面是我自己寫的一個簡單的計算器demo
1.先創建一個計算的基類,寫了一個虛方法便於子類重寫這個方法。
public class Operation
{
private double _NumA = 0;
private double _NumB = 0;
public double NumB
{
get { return _NumB; }
set { _NumB = value; }
}
public double NumA
{
get { return _NumA; }
set { _NumA = value; }
}
public virtual double GetResult()
{
double result = 0;
return result;
}
}
2.創建具體的加減乘除的計算類(都繼承自基類Opreation)並重寫父類方法GetResult(),一下就只給出加法的類
public class OperationAdd:Operation
{
public override double GetResult()
{
return NumA + NumB;
}
}
3.創建工廠類用來實例化不同的對象
public class OperationFactory
{
public static Operation CreatOperator(string operate)
{
Operation op = null;
switch (operate)
{
case "+":
op = new OperationAdd();
break;
case "-":
op = new OperationSub();
break;
}
return op;
}
}
4.然後就是調用了,調用的時候很方便
class Program
{
static void Main(string[] args)
{
Operation op = FFactory.OperationFactory.CreatOperator("+");
op.NumA = 12.29;
op.NumB = 15.12;
Console.WriteLine(op.GetResult());
Console.ReadLine();
}
}
這樣一個簡單的簡單工廠模式就實現了。
簡單工廠設計模式也是有缺點的。因爲簡單工廠模式將實例化對象的所有邏輯都放在一個工廠類裏面,如果要添加一個實現類就得去修改工廠類,所以簡單工廠模式跟高內聚原則是相悖的,