設計模式 Abstract Factory模式

2021-04-13 21:15:02 字數 1411 閱讀 3641

還是乙個創造型模式,可以簡單的認為,創造型模式就是對使用者使用new的乙個封裝,封裝作為物件導向乙個重要的特性,它絕對不是一對大括號那麼簡單,他重要的是封裝變化點.如果沒有變化,那就別封裝吧,直接讓使用者new吧,這樣效率是最高的,但因為會有變化,所以才會有物件導向和設計模式.抽象工廠是應對這樣的一系列變化的,比如我們最初需要乙個road類,用以表現我們遊戲專案的道路,那麼,我們可以簡單的這樣表示:

road road 

=new

road();

但是後來需求變了,我需要提供另一種道路模型,按上面的實現方式,我們需要改動客戶**,比如

waterroad 

=new

waterroad();

這時候,我們可以簡單的封裝這個變化點,提供乙個介面函式(也就是工廠)來創造類,而客戶端每次不直接new類了,而是從這個工廠裡申請類.這裡有個前提就是如果有變化,我們最不希望修改的是哪部分,有變化肯定會造成一部分**的修改,在這裡,我們不希望修改的是客戶端的**,舉個例子,客戶端有複雜的遊戲邏輯,比如

class

roadfactory

//client

road road 

=roadfactory.createroad();

//利用road實現的複雜遊戲邏輯

我不希望改動的是這部分的**,而在c++中,應對變化的方法是"實則需之",把幾個要變化的東西虛之,利用多型,在執行時決定它的型別.

有個有意思的例子,陪d逛街,d打算吃雞腿和薯條,我可以來到麥當勞或者肯德基,對他們說給我個雞腿和薯條就好了.在這裡,麥當勞和肯德基就是乙個工廠,而我是客戶.我不需要對我的行為做很大修改,只要來到麥當勞給錢,拿食品,然後和d分享就好了,我換肯德基也是這樣,以後有新的店子,只要他提供雞腿和薯條,我都可以這麼做.所以抽象工廠設計模式很適應我選擇在不同店子買雞腿和薯條的變化.抽象工廠不能處理的是,我需求的產品數量應該固定,或者說應該對工廠透明,即我只能要工廠能提供的產品,如果d今天要薯條或雞腿,明天要吃中國麵條,那估計麥當勞和肯德基這個工廠必須做大修改了.

通過看《com技術內幕》,對物件導向也有了進一步的認識,應該保證介面穩定,客戶和介面通訊,在c++中,我們應該把容易變化的變成抽象類,客戶使用抽象類,由於可以使用不同的類來實現抽象類的介面,所以客戶可以在不改變的情況下,也擁有了抽象類的這種變化.抽象類的決定是在執行時.這也體現了中國古代的中庸哲學,把容易變化的東西留到最後再決定,保證其他事物的正常運作.抽象工廠需要抽象的是兩種型別,一種是抽象工廠,把它抽象了,就可以在執行時提供不同的工廠.還有就是產品,在執行時就能更換不同的產品.還有乙個需要注意的地方是,之所以還用了抽象工廠,是因為工廠類的產品有一定的依賴關係,換句話說,d喜歡麥當勞的薯條配麥當勞的可樂,不喜歡麥當勞的薯條配肯德基的可樂,這也是抽象工廠意圖--"提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。"中"相關或相互依賴"的意義.所以沒有模式是萬能的,每個模式都有它的適應範圍.

設計模式 設計模式

物件導向程式設計 oop 的基本概念有 封裝,抽象,繼承,多型等,如何開發出可復用的物件導向軟體一直困擾著軟體開發人員。可復用的物件導向技術包括類的繼承,物件的組合和引數化型別 generic gof的巨著 設計模式 總結出可復用的物件導向的23個設計模式,並且歸類成 建立型模式,結構型模式和行為型...

設計模式 命令設計模式

一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...

設計模式 9 設計模式

文章 head first 第一章 head first 設計模式讀書筆記 1 策略模式 觀察者模式 head first設計模式學習2 裝飾者模式 head first 設計模式3 工廠模式 head first設計模式4 命令模式 head first 設計模式5 介面卡模式和外觀模式 head...