工廠方法模式
簡單工廠類
簡單工廠模式屬於建立型模式,又稱靜態工廠方法(Static factory method)模式。其是由一個工廠物件決定建立出哪一種產品類的例項,可理解為不同工廠模式的一個特殊實現。
public class BreadFactory {
public static BreadMaker MakeBread(int breadType) {
BreadMaker breadMaker = null;
switch(breadType)
{
case1 :
breadMaker = new BlackBread();
case2 :
breadMaker = new HoneyBread();
........
}
return breadMaker;
}
}
上述程式碼對於修改開放了,違反了開放封閉原則。故而引出工廠方法模式,去解決這樣的矛盾。
GOF對於工廠方法模式的定義是:“定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使得一個類的例項化被延遲到其子類。”
具體實現程式碼如下
public class BreadMaker
{
public void GetBread()
{
}
}
public class BlackBread extends BreadMaker{
@override
public void GetBread()
{
"黑麵包"
}
}
public class HoneyBread extends BreadMaker{
@override
public void GetBread()
{
"蜂蜜麵包"
}
}
public class WhiteBread extends BreadMaker{
@override
public void GetBread()
{
"白麵包"
}
}
public interface IFactory{
BreadMaker CreateBread();
}
public class BlackBreadFactory implements IFactory
{
@override
public BreadMaker CreateBread()
{
return new BlackBread();
}
}
public class HoneyBreadFactory implements IFactory
{
@override
public BreadMaker CreateBread()
{
return new HoneyBread();
}
}
public class WhiteBreadFactory implements IFactory
{
@override
public BreadMaker CreateBread()
{
return new WhiteBread();
}
}
工廠模式適用的地方:
- 當一個類不知道他所必須建立的物件的類是,比如要建立一個白麵包的物件,但是並不知道他的類是whitebread
- 當一個類希望由它的子類來指定它所建立的物件時
- 當類將建立物件的職責委託給多個幫助子類中的某一個,並且希望將哪一個幫助子類是代理者這一資訊區域性化的時候