Factory 方法模式(C++描述)

來源:互聯網
上載者:User

Factory 方法模式是對簡單原廠模式的改進。首先看看簡單原廠模式的缺點。
軟體是之所以區別於程式,是因為它可以被人們使用,並能間接創造效益。需求是軟體開發的核心,忽視使用者的需求,軟體本身就沒有存在的價值。

假如Nokia又新開發了一款新手機N99,對於採用簡單原廠模式設計的系統,我們的做法是:
1.新增一個CN99類繼承自CNokia抽象類別,這個符合OCP原則。
註:OCP:Open-Closed Principle開閉原則。OCP關注的是靈活性,改動是通過增加代碼進行的,而不是改動現有的代碼。對擴充開放,對修改關閉。


2.修改靜態Factory 方法中的判斷邏輯,增加對N99的建立代碼。這個明顯違背OCP。

改進簡單原廠模式,我們要做的就是克服2中的缺點。


下面的Factory 方法模式,新增一個N96的工廠類,不用修改已有的代碼,完全支援OCP原則,而且Factory 方法模式也完全遵守裡氏替換原則,LSP原則是OCP成為可能的重要原則。
註:Liskov Substitution Principle(裡氏代換原則):子類型(subtype)必須能夠替換它們的基底類型。

 

雖然Factory 方法模式是對簡單原廠模式缺點的該進,這個缺點就是違背軟體設計原則OCP。但是並不是Factory 方法模式就優於簡單原廠模式,只不過後者更符合常規的軟體設計理念。 

/* 抽象工廠類 */<br />#pragma once<br />#include "Nokia.h"<br />class CFactoryMethod<br />{<br />public:<br />CFactoryMethod(void);<br />public:<br />virtual ~CFactoryMethod(void);<br />public:<br />virtual CNokia * CreateNokiaMobile(void) = 0;<br />};</p><p>#include "FactoryMethod.h"</p><p>CFactoryMethod::CFactoryMethod(void)<br />{<br />}</p><p>CFactoryMethod::~CFactoryMethod(void)<br />{<br />}</p><p>/* 生產N99的具體工廠類 */<br />#pragma once<br />#include "factorymethod.h"<br />#include "N96.h"<br />class CN96Factory :<br />public CFactoryMethod<br />{<br />public:<br />CN96Factory(void);<br />public:<br />virtual ~CN96Factory(void);<br />public:<br />virtual CNokia * CreateNokiaMobile(void);<br />};</p><p>#include "N96Factory.h"</p><p>CN96Factory::CN96Factory(void)<br />{<br />}</p><p>CN96Factory::~CN96Factory(void)<br />{<br />}</p><p>CNokia * CN96Factory::CreateNokiaMobile(void)<br />{<br />return new CN96();<br />}</p><p>/* 用戶端通過建立N99工廠生產Nokia手機 */<br />#include "stdafx.h"<br />#include "N96Factory.h"<br />int _tmain(int argc, _TCHAR* argv[])<br />{<br />CFactoryMethod * factoryMethod = new CN96Factory();<br />CNokia * nokia = factoryMethod->CreateNokiaMobile();<br />nokia->MakeCall("1234567");<br />return 0;<br />}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.