設計模式 簡單工廠模式

2021-08-24 23:16:51 字數 1839 閱讀 3841

為什麼要學習設計模式呢?

作為乙個剛進入公司的小菜鳥,我遇到的第乙個問題就是:公司**很龐雜,我該怎麼入手,該怎麼去了解某一段**到底是在幹什麼呢?偶爾一天和乙個同事聊天,我跟他吐槽了一下公司的**--看不懂,他跟我說:「其實可以看一下設計模式,有的時候可能不需要仔細的看**也能知道這個函式再講什麼。」我覺得採用一下這位師兄(鬼知道有沒有用,畢竟我也不了解啊。)的建議,畢竟實踐出真知麼。

《大話設計模式》:我不敢說這本書是一本好書,因為我才看了兩章。不過這書的優點就是通俗易懂,適合像我這種超級小白學習。

羅里吧嗦的話贅述完了,該上正菜了。

這本書開始講到的乙個問題:怎麼樣去寫好**?

這裡有三個點:可維護,可復用,可擴充套件,靈活性好。

總之:寫**的原則是->拒絕又臭又長的**。。。

簡單工廠模式:

客戶端**:

operation oper;

oper = operationfactory.createoperate("+");

oper.numbera=1;

oper.numberb=2;

double result = oper.getresult();

服務端**:(我不知道是不是服務端,我就先叫他服務端了,畢竟這些**是服務於客戶端)

public class operation

setpublic  double numberb

setpublic virtual double gerresult()

double result=0;

return  result;

public class operationadd:operation

public  override double getresult(){

double result = numbera + numberb;

return result  

public class operationfactory

public static operation createoperate(string operate)

operation oper=null;

switch(operate)

case "+":

oper = new opertionadd();

break;

return oper;

來理解一下這段**是在幹什麼?

operation:提供了獲得結果的一種方式getresult。

operationadd:繼承了operation類,並且具體的實現了getresult類(此處為加法)。

operationfactory:實現了createoperate函式。

createoperate函式具體實現了:

1,獲取客戶端傳入的不同操作。

2,生成具體的操作物件。

簡單工廠模式的優點:

為什麼要使用簡單工廠模式呢?

(來自小白的解釋:因為我覺得一般客戶端的**比較複雜,需要直接面對客戶,所以太過複雜的**容易出現不同的問題,所以將原來放在客戶端的**,放到後台去實現,減少客戶端的**,降低客戶端出錯的可能。。。)

這裡實現的機理:

封裝,繼承,多型麼。

繼承:operationadd繼承了operation函式。

多型:客戶端生成乙個operation的物件,通過工廠傳出子類operationadd的物件並賦值給客戶端的父類物件,通過父類物件呼叫getresult函式(這裡實際呼叫的是opertionadd的getresult函式),從而實現多型。

(歡迎各位大神的不吝賜教。文中**來自大話設計模式,如果有錯,那可能是我手誤不是書的問題。)

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

一 簡單工廠 定義 簡單工廠模式 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...