概述:
Factory 方法(factory method):Factory 方法通過一個抽象類別實現了所有對產品的加工作業碼,唯獨將產品的構建方法寫成抽象方法。繼承這個抽象類別的具體類只重寫其構建方法,這樣就實現了對於不同被構建產品複用相同的加工操作邏輯。Factory 方法適用於需要在子類中才能決定執行個體化哪個被操作對象,同時這些被操作對象又複用相同操作邏輯的場合。
類圖:
程式碼範例:
1.工廠裡的產品抽象類別
/// <summary>
/// 工廠裡的產品抽象類別
/// </summary>
public abstract class Product{}
2.具體的產品
/// <summary>
/// 具體的產品
/// </summary>
public class ConcreteProduct : Product{}
3.建立含有Factory 方法的抽象業務類
/// <summary>
/// 含有Factory 方法的抽象業務類
/// </summary>
public abstract class Creator
{
void FactoryMethod();
}
4.具體的Factory 方法實作類別
/// <summary>
/// 具體的Factory 方法實作類別
/// </summary>
public class ConcreteCreator : Creator
{
void FactoryMethod();
}
其他樣本:
步驟很簡單,為了防止自己忘記,從部落格園裡摘抄噬菌體大哥的一個例子,稍微改進一下便於理解
View Code
///
/// 產品介面
///
public abstract class IProduct
{
public abstract void Behavior();
}
///
/// A類型產品
///
class ProductA : IProduct
{
public override void Behavior()
{
Console.WriteLine("產品A的行為");
}
}
///
/// B類型產品
///
class ProductB : IProduct
{
public override void Behavior()
{
Console.WriteLine("產品B的行為");
}
}
///
/// 含有Factory 方法的抽象業務類
///
public abstract class ACreator
{
public abstract IProduct FactoryMethod();
public void OpreateMethod()
{
IProduct product = FactoryMethod();
//對product的一系列操作
}
}
///
/// 生產A類型產品的具體業務類
///
public class CreatorA : ACreator
{
public override IProduct FactoryMethod()
{
return new ProductA();
}
}
///
/// 生產B類型產品的具體業務類
///
public class CreatorB : ACreator
{
public override IProduct FactoryMethod()
{
return new ProductB();
}
}
用戶端調用:
ACreator create = new CreatorA();
IProduct product = create.FactoryMethod();
product.Behavior();
補充TerryLee的例子
原始錯誤已經更正過來
View Code
namespace DesignPatternLab.FactoryMethodPackage
{
class FactoryMethodSample4
{
}
/// <summary>
/// 定義抽象介面
/// </summary>
public abstract class Log
{
public abstract void Write();
}
/// <summary>
/// 具體實作類別
/// </summary>
public class EventLog : Log
{
public override void Write()
{
Console.WriteLine("EventLog Write Success"); ;
}
}
/// <summary>
/// 具體實作類別
/// </summary>
public class FileLog : Log
{
public override void Write()
{
Console.WriteLine("FileLog Write Success");
}
}
/// <summary>
/// 定義抽象方法介面
/// </summary>
public abstract class LogFactory
{
public abstract Log Create();
}
/// <summary>
/// 具體實現的執行個體化類
/// </summary>
public class EventFactory:LogFactory
{
public override Log Create()
{
return new EventLog();
}
}
/// <summary>
/// 具體實現執行個體化的類
/// </summary>
public class FileFactory : LogFactory
{
public override Log Create()
{
return new FileLog();
}
}
}
//用戶端調用如下
LogFactory factory = new EventFactory();
Log log = factory.Create();
log.Write();
小結:
原廠模式應用的非常多,希望記住,能熟練應用,最起碼面試的時候能寫出來