【大話設計模式讀書筆記——工廠方法模式】
阿新 • • 發佈:2018-01-01
down 除了 wikipedia override 客戶 class a over dfa mar
工廠方法模式
工廠方法模式的實質是“定義一個創建對象的接口,但讓實現這個接口的類來決定實例化哪個類。工廠方法讓類的實例化推遲到子類中進行。
工廠方法模式 VS 簡單工廠模式
簡單工廠的模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇動態的實例化相關的類。對於客戶端來說,去除了與具體產品的依賴。
工廠方法模式,定義了一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使得一個類的實例化延遲到其子類。工廠方法模式實現時,客戶端需要決定實例化哪一個工廠來實現運算類,選擇判斷的問題還是存在。工廠方法把簡單工廠內部的邏輯判斷移到了客戶端來進行。如果你需要加功能,本來是需要修改工廠的,現在需要修改客戶端。
維基百科-工廠方法模式
工廠方法實現計算器
/// <summary>
/// 工廠接口
/// </summary>
public interface IFactory
{
Operation CreateOperation();
}
/// <summary> /// 運算基類 /// </summary> public abstract class Operation { public double NumA { get; set; } public double NumB { get; set; } public abstract double GetResult(); }
#region 加減乘除實現類 public class OperationAdd : Operation { public override double GetResult() { return NumA + NumB; } } public class OperationSub : Operation { public override double GetResult() { return NumA - NumB; } } public class OperationMul : Operation { public override double GetResult() { return NumA * NumB; } } public class OperationDiv : Operation { public override double GetResult() { return NumA % NumB; } } #endregion
#region 具體工廠
public class AddFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationAdd();
}
}
public class SubFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationSub();
}
}
public class MulFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationMul();
}
}
public class DivFactory : IFactory
{
public Operation CreateOperation()
{
return new OperationDiv();
}
}
#endregion
IFactory factory = new AddFactory();
Operation operation = factory.CreateOperation();
operation.NumA = 2;
operation.NumB = 3;
Console.WriteLine(operation.GetResult());
【大話設計模式讀書筆記——工廠方法模式】