工廠模式的介紹、優缺點


二、工廠模式

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.比“簡單工廠模式”的優缺點

優點:克服了簡單工廠違背開放-封閉原則的缺點,又保留了封裝對象創建過程的優點,降低客戶端和工廠的耦合性,所以說“工廠模式”是“簡單工廠模式”的進一步抽象和推廣。

缺點:每增加一個產品,相應的也要增加一個子工廠,加大了額外的開發量。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM