有毒的設計模式 簡單工廠模式

2021-07-10 16:30:03 字數 2200 閱讀 7678

// description

:說些廢話

唔,本來想偷懶不寫設計模式的東西,但是自從上週被阿里巴巴**面問出屎之後我還是決定好好複習一下設計模式吧。。。

還有就是應該用markdown編輯器的,但是那排版我老感覺很抓急,排得不漂亮,還是用普通的吧 ...............    orz 

//正文:

1.在程式中,需要建立的物件很多,導致物件的new操作多且雜時,需要使用簡單工廠模式;

2.由於物件的建立過程是我們不需要去關心的,而我們注重的是物件的實際操作,所以,我們需要分離物件的建立和操作兩部分,如此,方便後期的程式擴充套件和維護。

以下就是c++實現的一段**:

#include

#include

using

namespace

std;

typedef

enum

producttypetag

producttype

;// here is the product class

class

product

;class

producta

:public

product

};class

productb

:public

product

};class

productc

:public

product

};// here is the factory class

class

factory}};

intmain

(int

argc

,char

*argv

)

那麼依我理解,這個productfactory就是乙個車間,然後裡面有三颱機器,分別就是生產producta、productb、productc的,我們有了這個工廠,就可以去用這個工廠類去產出這些產品(呼叫工廠類方法),其實做的事情也就是new乙個新的product。那麼你就可以問工廠去拿這些產品,而不需要你直接去工廠裡面的機器上拿這些產品了,仔細想一下是有那麼點用處的。(未應用於實際,尚未知道好在**,暫時這麼理解,以後記得補充..)

然後這個簡單工廠模式呢,涉及乙個很重要的問題,就是實現類的三大特性:封裝、繼承、多型。

封裝:封裝起product類還有三個product子類

繼承:producta,productb,productc繼承自product

多型:子類重寫方法

//不如趁機複習一下多型的概念吧:

多型:同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果。在執行時,可以通過指向基類的指標,來呼叫實現派生類中的方法。

c++中,實現多型有以下的方法:虛函式,抽象類,覆蓋,模板(過載和多型無關)。

//那麼我自己的問題來了:1.

q:為什麼要封裝?直接在main裡面實現create不同型別的product不是**更加少更加方便麼?

a:封裝就是為了「介面與實現分離」,的確,**量加大了,但是,程式容易維護了,容易擴充套件了,容易復用了,簡單來說:就是你一看main函式就知道他做了什麼,不用仔細去看到底哪些是實現哪些是介面。

2. q:為什麼那個是switch來選擇producta還是b還是c?為什麼不用三個if?

a:判斷分支,意味著每個條件都要進行判斷,等於計算機做了三次無用功。

3. q:為什麼不全部實現都寫在product裡面,那就不用派生出三個子類了啊?

a:根據程杰大大的思想,你老闆跟你說productc那個生產機器要重新安裝,那你就直接要生產機器c就是了,難道你還去問你老闆把整個車間的機器都給你看一遍你再去弄機器c嗎..  即是說,你到時要增加或者修改乙個product子類,那麼直接去  「派生乙個子類」  或者  「修改對應子類」  就行了..

這叫做:「降低耦合度(松耦合 && 緊耦合)」

那麼來拓展一下知識咯:「什麼叫耦合」  

耦合度顧名思義,就是兩者之間的密切關係程度,也可以理解為相互依賴程度。 4.

q:那麼什麼時候用簡單這個模式啊?

a:前面其實已經說過了,不過我自己理解就是經常new那些相似的物件,例如加減乘除4個類物件。(以後有更好理解記得回來改..  我總覺得這樣理解不靠譜!) 4

設計模式 工廠模式(簡單工廠)

一 簡單工廠 定義 簡單工廠模式 factory pattern 屬於類的創新型模式,又叫靜態工廠方法模式 static factorymethod pattern 是通過專門定義乙個類來負責建立其他類的例項,被建立的例項通常都具有共同的父類。特點 工廠類直接實現,乙個產品介面,乙個工廠類可以產生多...

設計模式(簡單工廠模式 工廠模式 抽象工廠模式)

當邏輯較為簡單時,可以直接建立對應的類。如下 include using namespace std class class banana class pear intmain 通過此 可以發現,使用者直接與客戶接觸,違背了dip 依賴倒轉 原則,過於麻煩,所以引出簡單工廠模式。include us...

設計模式 簡單工廠設計模式

請用任意一種物件導向語言實現計算器控制台程式,要求輸入兩個數和運算符號,得到結果。operation運算類 public class operation set public double numberb set public virtual double getresult 加減乘除類 using...