設計模式的區別

2022-07-16 06:21:11 字數 2172 閱讀 7318

簡單**模式中,**類知道被**類的行為,因為**類與被**類實現的是同乙個介面,因此**類與被**類的結構是相同的;

而策略模式中,策略容器並不知道內部策略的詳細資訊,因為容器並沒有實現與內部策略相同的介面,即容器與內部策略只是簡單的組合關係,容器只是將內部策略的行為抽取出來,進行了統一的實現。策略模式僅僅封裝演算法(包括新增 & 刪除),但策略模式並不決定在何時使用何種演算法,演算法的選擇由客戶端來決定。

策略模式定義了一系列的演算法,並將每乙個演算法封裝起來,而且使它們還可以相互替換。

策略模式讓演算法獨立於使用它的客戶而獨立變化。

在軟體開發中也常常遇到類似的情況,實現某乙個功能有多種演算法或者策略,我們可以根據環境或者條件的不同選擇不同的演算法或者策略來完成該功能。如查詢、排序等,一種常用的方法是硬編碼(hard coding)在乙個類中,如需要提供多種查詢演算法,可以將這些演算法寫到乙個類中,在該類中提供多個方法,每乙個方法對應乙個具體的查詢演算法;當然也可以將這些查詢演算法封裝在乙個統一的方法中,通過if…else…或者case等條件判斷語句來進行選擇。這兩種實現方法我們都可以稱之為硬編碼,如果需要增加一種新的查詢演算法,需要修改封裝演算法類的源**;更換查詢演算法,也需要修改客戶端呼叫**。在這個演算法類中封裝了大量查詢演算法,該類**將較複雜,維護較為困難。如果我們將這些策略包含在客戶端,這種做法更不可取,將導致客戶端程式龐大而且難以維護,如果存在大量可供選擇的演算法時問題將變得更加嚴重。

1. 相似:

在模式結構上,兩者很相似;

2.差別:

一、概念

介面卡模式,允許因為介面不相容而不能在一起工作的類工作在一起,做法是將類自己的介面包裹在乙個已存在的類中。

裝飾器模式,原有的不能滿足現有的需求,對原有的進行增強。

**模式,同乙個類而去呼叫另乙個類的方法,不對這個方法進行直接操作。

介面卡的特點在於相容,從**上的特點來說,適配類與原有的類具有相同的介面,並且持有新的目標物件。就如同乙個三孔轉2孔的介面卡一樣,他有三孔的插頭,可以插到三孔插座裡,又有兩孔的插座可以被2孔插頭插入。介面卡模式是在於對原有3孔的改造。在使用介面卡模式的時候,我們必須同時持有原物件,適配物件,目標物件。。。。

裝飾器模式特點在於增強,他的特點是被裝飾類和所有的裝飾類必須實現同乙個介面,而且必須持有被裝飾的物件,可以無限裝飾。

**模式的特點在於隔離,隔離呼叫類和被呼叫類的關係,通過乙個**類去呼叫。

總的來說就是如下三句話:

在裝飾器模式中,必須要有被裝飾的類和裝飾的類。。在這套**中,原先sourceorderapi的物件就是被裝飾的類,而新建newsourceorderapiimpl 就是裝飾類,裝飾類必須把被裝飾的物件當作引數傳入。

這就是和**模式的**不同之處,**模式一定是自身持有這個物件,不需要從外部傳入。而裝飾模式的一定是從外部傳入,並且可以沒有順序,按照**的實際需求隨意挑換順序,就如你吃火鍋先放白菜還是先放丸子都可以。

再從使用上來看,**模式注重的是隔離限制,讓外部不能訪問你實際的呼叫物件,比如許可權控制,裝飾模式注重的是功能的拓展,在同乙個方法下實現更多的功能。

相對來說,抽象工廠模式比建造者模式的尺度要大,它關注產品整體,而建造者模式關注構建過程,因此建造者模式可以很容易地構建出乙個嶄新的產品,只要導演類能夠提供具體的工藝流程。也正因為如此,兩者的應用場景截然不同,如果希望遮蔽物件的建立過程,只提供乙個封裝良好的物件,則可以選擇抽象工廠方法模式。而建造者模式可以用在構件的裝配方面,如通過裝配不同的元件或者相同元件的不同順序,可以產生出乙個新的物件,它可以產生乙個非常靈活的架構,方便地擴充套件和維護系統。

它們的uml圖是一樣的,但意圖卻完全不一樣,策略模式是讓使用者指定更換的策略演算法,而狀態模式是狀態在滿足一定條件下的自動更換,使用者無法指定狀態,最多只能設定初始狀態。

相對來說,抽象工廠模式比建造者模式的尺度要大,它關注產品整體,而建造者模式關注構建過程,因此建造者模式可以很容易地構建出乙個嶄新的產品,只要導演類能夠提供具體的工藝流程。也正因為如此,兩者的應用場景截然不同,如果希望遮蔽物件的建立過程,只提供乙個封裝良好的物件,則可以選擇抽象工廠方法模式。而建造者模式可以用在構件的裝配方面,如通過裝配不同的元件或者相同元件的不同順序,可以產生出乙個新的物件,它可以產生乙個非常靈活的架構,方便地擴充套件和維護系統。

它們的uml圖是一樣的,但意圖卻完全不一樣,策略模式是讓使用者指定更換的策略演算法,而狀態模式是狀態在滿足一定條件下的自動更換,使用者無法指定狀態,最多只能設定初始狀態。

不同設計模式的區別

簡單工廠 工廠方法 抽象工廠 builder模式的區別 no1 核心定義 1 簡單工廠模式 乙個工廠方法建立不同型別的物件 2 工廠方法模式 乙個具體的工廠類負責建立乙個具體物件型別 4 builder模式 物件的構建與表示分離,它更注重物件的建立過程 no2 工廠方法模式與簡單工廠的區別主要有兩點...

設計原則和設計模式的區別

在軟體工程當中,設計原則和設計模式是不同的 設計原則 設計原則是為了更好的設計軟體的高層指導方針 它不提供具體的實現方式也不會繫結任何一種程式語言 最常用的原則是solid srp,ocp,lsp,isp,dip 原則.比如,srp single responsibility principle 建...

設計模式區別(一)

最近一段時間一直在學習設計模式,我有乙個感受就是 接觸頭幾個設計模式時感覺似乎就那麼一回事,好像沒有什麼可學習的,因為理解起來很簡單,也很容易記憶,在例子的帶動下似乎也有那麼一點意思了,好像自己懂了。慢慢地,隨著學習的深入,接觸到了各種各樣的設計模式,前面那種輕鬆的勁兒就沒了,越學越迷糊,感覺很多模...