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

2021-06-19 06:47:28 字數 2166 閱讀 7896

名詞理解:

工廠(factory)模式我們可以做如下理解,假設有乙個audi的公司生產汽車(似乎也不用假設了),它掌握一項核心的技術就是生產汽車,另一方面,它生產的汽車是有不同型號的,並且在

不同的生產線上進行組裝。當客戶通過銷售部門進行預定後,audi公司將在指定的生產線上為客戶生產出它所需要的汽車。

策略(strategy)模式在結構上與工廠模式類似,唯一的區別是工廠模式例項化乙個產品的操作是在服務端來做的,換句話說客戶端傳達給服務端的只是某種標識,服務端根據該標識例項化乙個物件。而策略模式的客戶端傳達給服務端的是乙個例項,服務端只是將該例項拿過去在服務端的環境裡執行該例項的方法。這就好比乙個對汽車不甚了解的人去買車,他在那一比劃,說要什麼什麼樣的,銷售部門根據他的這個「比劃」來形成乙份訂單,這就是工廠模式下的工作方式。而策略模式下那個顧客就是個行家,他自己給出了訂單的詳細資訊,銷售部門只是轉了一下手就交給生產部門去做了。通過兩相對比,我們不難發現,採用工廠模式必須提供足夠靈活的銷售部門,如果使用者有了新的需求,銷售部門必須馬上意識到這樣才可以做出合適的訂單。所以倘一款新車出來了,生產部門和銷售部門都需要更新,對顧客來說也需要更新對新車的描述所以需要改動的地方有三處。而策略模式中的銷售部門工作比較固定,它只負責接受訂單並執行特定的幾個操作。當一款新車出來時,只需要對服務端的生產部門和客戶端的**進行更新,而不需要更新銷售部門的**。

技術支援:

簡單工廠和策略的基礎都是因為物件導向的封裝與多型。他們實現的思想都是先設定乙個抽象的模型並從該模型派生出符合不同客戶需求的各種方法,並加以封裝。

模型:audi公司的產品有a6, a4, tt, r8...我們如果將每種車的生產做乙個方法,那麼我們的模型結構應該是這樣的

namespace

class

audi

public

void

createa6()

public

void

creatett()}}

設想一下如果audi出了一款新車,那麼我們必須要在audi這個類裡邊新增新的方法,這就要求總公司提供對audi這個類的修改許可權,如果新車專案的負責人對其他車型的負責人有什麼意見,

它可以輕而易舉的改亂他們的**,讓他們的工作陷入癱瘓(當然現實中沒有人會這麼幹)。我們的目標是新生產線的專案負責人只有許可權對自己的專案情況作出修改,除此之外他一無所知。

我們可以考慮如下的模型結構

class

a6factory : basefactory

}class

a4factory : basefactory

}class

ttfactory : basefactory

}class

r8factory : basefactory

}class

selectca***ctorypattern}}

class

selectcarstrategypattern

public

void

ordercar()

}}

這種結構的好處是將每一條生產線進行了封裝,在必要的情況下可以使他們的源**在彼此之間不可見,這一點正是我們所希望看到的。另外如果每條生產線涉及的**量很大,
這種結構也可以避免重複編譯,我們只需要對新增加的生產線進行編譯而之前的生產線我們甚至連動都不需要動。到目前為止,簡單工廠模式和策略模式沒有什麼區別。
工廠模式和策略模式的區別在於例項化乙個物件的位置不同,對工廠模式而言,例項化物件是放在服務端的,下面這個類就是用來做這個的。
class

selectca***ctorypattern

}

而策略模式例項化物件的操作在客戶端,服務端的「銷售部門」只負責傳遞該物件,並在服務端的環境裡執行特定的操作。正如下面這個類所做的
selectcarstrategypattern

public

void

ordercar()

}下面是服務端在兩種模式下例項化乙個物件並進行操作的示例,工廠模式要求服務端的銷售部門足夠靈敏,而策略模式由於對策略進行了封裝,所以他的銷售部門比較傻,需要客戶提供

足夠能區分使用哪種策略的引數,而這最好的就是該策略的例項了。
}}  

設計模式之簡單工廠模式,工廠模式,策略模式

簡單工廠模式 的最大優點是在工廠類中包含了必要的邏輯判斷,根據客戶端的選擇動態例項化相關類,去得到客戶想要的產品。但個人覺得簡單工廠模式的最大優點正是產生它最大缺點之處。因為它的工廠類違反了開放 封閉原則 類,模組,方法等對於擴充套件是開放的,對於更改是封閉的。每當新增乙個功能,我們就需要去修改它的...

設計模式 簡單工廠和策略模式

模式的核心是工廠類,這個類負責產品的建立,而客戶端可以免去產品建立的責任,這實現了責任的分割。但由於工廠類集中了所有產品建立邏輯的,如果不能正常工作的話會對系統造成很大的影響。如果增加新產品必須修改工廠角色的原始碼改工廠角色的原始碼。個人理解就是在乙個工廠內 工廠類 定義好規範標準 父類,虛方法 然...

大話設計模式 簡單工廠模式與策略模式

簡單工廠模式 運算類工廠 public class operationfactory case case case case sqr case sqrt case return oper 關聯關係 如下 class penguin bird private climate climate 聚合關係如...