《大話設計模式》ruby版代碼:Factory 方法模式

來源:互聯網
上載者:User

標籤:

一,先看看簡單原廠模式

簡單原廠模式的優點:工廠類中包含了必要的邏輯判斷,根據用戶端的選擇動態執行個體化相關的類,對於用戶端來說,去除了與具體產品的依賴。

簡單原廠模式的缺點:增加功能的時候,就需要增加case的條件分支,也就是要修改工廠類,違背了“開放-封閉原則”。

2,Factory 方法模式:

# -*- encoding: utf-8 -*-#運算類class Operation    attr_accessor :number_a,:number_b        def initialize(number_a = nil, number_b = nil)        @number_a = number_a        @number_b = number_b    end        def result        0    endend#加法類class OperationAdd < Operation    def result        number_a + number_b    endend#減法類class OperationSub < Operation    def result        number_a - number_b    endend#乘法類class OperationMul < Operation    def result        number_a * number_b    endend#除法類class OperationDiv < Operation    def result        raise ‘除數不能為0‘ if number_b == 0            number_a / number_b    endendmodule FactoryModule    def create_operation    endend#加法工廠class AddFactory    include FactoryModule        def create_operation        OperationAdd.new    end    end#減法工廠class SubFactory    include FactoryModule        def create_operation        OperationSub.new    endend#乘法工廠class MulFactory    include FactoryModule        def create_operation        OperationMul.new    end    end#除法工廠class DivFactory    include FactoryModule        def create_operation        OperationDiv.new    end    endfactory = AddFactory.newoper = factory.create_operationoper.number_a = 1oper.number_b = 2p oper.result

相比於簡單原廠模式,這裡的變化是移除了工廠類,取而代之的是具體的運算工廠,分別是加法工廠、減法工廠、乘法工廠和除法工廠。

Factory 方法模式:定義一個用於建立對象的介面,讓子類決定執行個體化哪一個類。Factory 方法是一個類的執行個體化延遲到了子類。

Factory 方法模式實現時,用戶端決定執行個體化哪一個工廠來實現運算類,選擇判斷的問題還是存在,也就是說,Factory 方法把簡單工廠的內部邏輯判斷轉移到了用戶端代碼來進行。想要增加功能,本來是修改工廠類,現在是修改用戶端。

 

這麼做的好處是,克服了簡單工廠違背“開放-封閉原則”的缺點,又保持了封裝對象建立過程的優點。

存在的問題是邏輯分支的判斷依然需要實現,只不過是從工廠類中轉移到了用戶端,利用”反射“可以解決分支判斷的問題。

《大話設計模式》ruby版代碼:Factory 方法模式

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.