在軟體生產過程中,經常面臨某個對象的建立工作,由於需求的變動,這些對象不斷的變化,但他們的介面相對穩定,怎麼樣把這種易變的對象隔離出來讓其它對象不因它的改變受到影響,在這樣的前提下就產生了原廠模式。
1、原廠模式相當於建立執行個體對象new,所以很常用,舉例說明:
有介面類Sample,及實作類別SampleA、SampleB,可以如下建立,
Sample sA = new SampleA,
Sample sB = new SampleB,
但如果實作類別很多的話,這樣建立起來很麻煩,所以可以建立工廠類Factory,具體實現如下,
class Factory
{
public static Sample CreateInstance(int casetype)
{
swith(casetype)
{
case 1:
return new SampleA();
break;
case 2:
return new SampleB();
break;
}
}
}
(以下轉)這樣,在整個就不涉及到Sample的具體子類,達到封裝效果,也就減少錯誤修改的機會,這個原理可以用很通俗的話來比喻:就是具體事情做得越多,越容易範錯誤.這每個做過具體工作的人都深有體會,相反,官做得越高,說出的話越抽象越籠統,範錯誤可能性就越少.好象我們從編程式中也能悟出人生道理?呵呵.
2、Factory 方法中還有Factory Method(Factory 方法)與Abstract Factory(抽象工廠),舉例說明:
如果上面例子中還有類Sample2要建立,可以用抽象Factory 方法,如下
public abstract class Factory
{
public abstract Sample CreateInstance();
public abstract Sample2 CreateInstance();
}
public class SimpleFactory:Factory
{
public Sample CreateInstance()
{
...
return new SampleA();
}
public Sample2 CreateInstance()
{
...
return new Sample2A();
}
}
public class ComplexFactory:Factory
{
public Sample CreateInstance()
{
...
return new SampleB();
}
public Sample2 CreateInstance()
{
...
return new Sample2B();
}
}
抽象工廠有一個關鍵要點,是因為SimpleFactory內,生產Sample和生產Sample2的方法之間有一定聯絡,所以才要將這兩個方法捆綁在一個類中,這個工廠類有其本身特徵,也許製造過程是統一的,比如:製造工藝比較簡單,所以名稱叫SimpleFactory。