工廠模式
簡介
工廠方法模式:定義一個用於創建對象的接口,讓子類決定實例化哪一個類。
工廠方法是一個類的實例化延遲到其子類。
後期對操作擴展時只需要添加實例化接口的方法,不需要修改。
例子
還舉簡單工廠模式中的例子。
分割名字的方法
classSplitName
{
privatestring frName, lName;
publicstring LName
{
get { return lName; }
set { lName = value; }
}
publicstring FrName
{
get { return frName; }
set { frName = value; }
}
}
繼承封方法的子類
逗號分割方法
public CommaSplit(string name)
{
int i = name.IndexOf(",");
if (i > 0)
{
FrName = name.Substring(0, i);
LName = name.Substring(i + 1);
}
else
{
FrName = name;
LName = "";
}
}
空格分割方法
classBlankSplit : SplitName
{
public BlankSplit(string name)
{
int i = name.IndexOf(" ");
if (i > 0)
{
FrName = name.Substring(0, i);
LName= name.Substring(i + 1);
}
else
{
FrName = name;
LName = "";
}
}
}
工廠
工廠用於創建分割姓名的對象
接口
interfaceIFactoryFunction
{
SplitName CreateSplitObject(string name);
}
創建逗號分割的對象
classCommaObject : IFactoryFunction
{
publicSplitName CreateSplitObject(string name)
{
returnnewCommaSplit(name);
}
}
空格分割
classBlankObject : IFactoryFunction
{
publicSplitName CreateSplitObject(string name)
{
returnnewBlankSplit(name);
}
}
客戶端使用
staticvoid Main(string[] args)
{
Console.WriteLine("請輸入你的姓名");
string inputName = Console.ReadLine();
IFactoryFunction operFactory = newCommaObject();//創建工廠用逗號分割
SplitName splitName =operFactory.CreateSplitObject(inputName);//實例化分割的對象
Console.WriteLine("姓"+splitName.FrName);
Console.WriteLine("名"+splitName.LName);
Console.ReadKey(true);
}
總結
工廠方法模式實現時,客戶端需要決定實例化哪一個工廠來實現運算類,選擇判斷的問題還是存在的。工廠方法把簡單工廠的內部邏輯判斷移到了客戶端來進行。