二、工廠模式
1.介紹
在上一節中介紹了“簡單工廠模式”,現在來介紹下“工廠模式”,在“工廠模式”和“簡單工廠模式”中,最主要,最明顯的區別之一是“工廠模式”下可以設立多個子工廠,而不是所有的產品有單一的工廠來生產,而是給各自特色的子工廠來生產。
2.例子
我們還是繼續使用“計算器”來作為例子吧。由於在產品Product的結構模式變化不大,所以就不在載入(詳情看“簡單工廠模式”的隨筆),主要載入“工廠模式”的代碼
a.父工廠接口(IFactory接口)
import SimpleFactory.Operation;
public interface IFactory {
public Operation createOperation();
}
b.子工廠(加法工廠,減法工廠,乘法工廠,除法工廠)
import SimpleFactory.Operation;
import SimpleFactory.OperationAdd;
import SimpleFactory.OperationSub;
import SimpleFactory.OperationMul;
import SimpleFactory.OperationDiv;
public class AddFactory implements IFactory{
public Operation createOperation() {
// TODO Auto-generated method stub
return new OperationAdd();
}
}
public class SubFactory implements IFactory{
@Override
public Operation createOperation() {
// TODO Auto-generated method stub
return new OperationSub();
}
}
public class MulFactory implements IFactory{
@Override
public Operation createOperation() {
// TODO Auto-generated method stub
return new OperationMul();
}
}
public class DivFactory implements IFactory{
@Override
public Operation createOperation() {
// TODO Auto-generated method stub
return new OperationDiv();
}
}
c.客戶端
import SimpleFactory.Operation; public class Client { public static void main(String[] args) { IFactory operFactory = new AddFactory(); Operation oper = operFactory.createOperation(); oper.set_numberA(1); oper.set_numberB(2); double result = oper.getResult(); System.out.println(result); } }
d.UML圖(例子是從《大話設計模式》中借鑒而來的,這是一本很不錯的書)

3.評價:
a.在客戶端Client中可以將工廠模式的主要結構看着很清楚,首先我們要有IFactory這個工廠的父接口,所有的子類或者子接口都可以實現它。AddFactory則是子類的代表之一,所以利用java的多態來實現,降低代碼的耦合性。而同時每個子工廠中擁有每條生產獨特產品的生產線。由此,工廠和產品掛上鈎了,聯系上了。每個子工廠生產出來的都是獨特的產品。
b.比“簡單工廠模式”的優缺點
優點:克服了簡單工廠違背開放-封閉原則的缺點,又保留了封裝對象創建過程的優點,降低客戶端和工廠的耦合性,所以說“工廠模式”是“簡單工廠模式”的進一步抽象和推廣。
缺點:每增加一個產品,相應的也要增加一個子工廠,加大了額外的開發量。
