設計模式的區別

簡單代理模式與策略模式在功能上的很大的區別是:

簡單代理模式中,代理類知道被代理類的行爲,由於代理類與被代理類實現的是同一個接口,所以代理類與被代理類的結構是相同的;算法

而策略模式中,策略容器並不知道內部策略的詳細信息,由於容器並無實現與內部策略相同的接口,即容器與內部策略只是簡單的組合關係,容器只是將內部策略的行爲抽取出來,進行了統一的實現。策略模式僅僅封裝算法(包括添加 & 刪除),但策略模式並不決定在什麼時候使用何種算法,算法的選擇由客戶端來決定。數據庫

 

策略模式vs工廠模式的區別:

策略模式定義了一系列的算法,並將每個算法封裝起來,並且使它們還能夠相互替換。設計模式

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

在軟件開發中也經常遇到相似的狀況,實現某一個功能有多種算法或者策略,咱們能夠根據環境或者條件的不一樣選擇不一樣的算法或者策略來完成該功能。如查找、排序等,一種經常使用的方法是硬編碼(Hard Coding)在一個類中,如須要提供多種查找算法,能夠將這些算法寫到一個類中,在該類中提供多個方法,每個方法對應一個具體的查找算法;固然也能夠將這些查找算法封裝在一個統一的方法中,經過if…else…或者case等條件判斷語句來進行選擇。這兩種實現方法咱們均可以稱之爲硬編碼,若是須要增長一種新的查找算法,須要修改封裝算法類的源代碼;更換查找算法,也須要修改客戶端調用代碼。在這個算法類中封裝了大量查找算法,該類代碼將較複雜,維護較爲困難。若是咱們將這些策略包含在客戶端,這種作法更不可取,將致使客戶端程序龐大並且難以維護,若是存在大量可供選擇的算法時問題將變得更加嚴重。post

 

1. 類似:編碼

    在模式結構上,二者很類似;spa

2.差異:設計

  • 用途不同 

  • 工廠是建立型模式,它的做用就是建立對象; 

  • 策略是行爲型模式,它的做用是讓一個對象在許多行爲中選擇一種行爲;
    • 關注點不同 代理


    • 一個關注對象建立 對象


    • 一個關注行爲的封裝

    • 解決不一樣的問題 


    • 工廠模式是建立型的設計模式,它接受指令,建立出符合要求的實例;它主要解決的是資源的統一分發,將對象的建立徹底獨立出來,讓對象的建立和具體的使用客戶無關。主要應用在多數據庫選擇,類庫文件加載等。

    •  
      策略模式是爲了解決的是策略的切換與擴展,更簡潔的說是定義策略族,分別封裝起來,讓他們之間能夠相互替換,策略模式讓策略的變化獨立於使用策略的客戶。

    • 工廠至關於黑盒子,策略至關於白盒子;

適配器模式,裝飾模式,代理模式異同:

1、概念

適配器模式,容許由於接口不兼容而不能在一塊兒工做的類工做在一塊兒,作法是將類本身的接口包裹在一個已存在的類中。
裝飾器模式,原有的不能知足現有的需求,對原有的進行加強。
代理模式,同一個類而去調用另外一個類的方法,不對這個方法進行直接操做。

適配器的特色在於兼容,從代碼上的特色來講,適配類與原有的類具備相同的接口,而且持有新的目標對象。就如同一個三孔轉2孔的適配器同樣,他有三孔的插頭,能夠插到三孔插座裏,又有兩孔的插座能夠被2孔插頭插入。適配器模式是在於對原有3孔的改造。在使用適配器模式的時候,咱們必須同時持有原對象,適配對象,目標對象。。。。

裝飾器模式特色在於加強,他的特色是被裝飾類和全部的裝飾類必須實現同一個接口,並且必須持有被裝飾的對象,能夠無限裝飾。

代理模式的特色在於隔離,隔離調用類和被調用類的關係,經過一個代理類去調用。

總的來講就是以下三句話:

  • 適配器模式是將一個類(a)經過某種方式轉換成另外一個類(b).
  • 裝飾模式是在一個原有類(a)的基礎之上增長了某些新的功能變成另外一個類(b).
  • 代理模式是將一個類(a)轉換成具體的操做類(b).

在裝飾器模式中,必需要有被裝飾的類和裝飾的類。。在這套代碼中,原先SourceOrderApi的對象就是被裝飾的類,而新建NewSourceOrderApiImpl 就是裝飾類,裝飾類必須把被裝飾的對象看成參數傳入。

這就是和代理模式的代碼不一樣之處,代理模式必定是自身持有這個對象,不須要從外部傳入。而裝飾模式的必定是從外部傳入,而且能夠沒有順序,按照代碼的實際需求隨意挑換順序,就如你吃火鍋先放白菜仍是先放丸子均可以。

再從使用上來看,代理模式注重的是隔離限制,讓外部不能訪問你實際的調用對象,好比權限控制,裝飾模式注重的是功能的拓展,在同一個方法下實現更多的功能。

 

 

建造者模式和抽象工廠模式的區別:

相對來講,抽象工廠模式比建造者模式的尺度要大,它關注產品總體,而建造者模式關注構建過程,所以建造者模式能夠很容易地構建出一個嶄新的產品,只要導演類可以提供具體的工藝流程。也正由於如此,二者的應用場景大相徑庭,若是但願屏蔽對象的建立過程,只提供一個封裝良好的對象,則能夠選擇抽象工廠方法模式。而建造者模式能夠用在構件的裝配方面,如經過裝配不一樣的組件或者相同組件的不一樣順序,能夠產生出一個新的對象,它能夠產生一個很是靈活的架構,方便地擴展和維護系統。

狀態模式和策略模式的區別:

  它們的UML圖是同樣的,但意圖卻徹底不同,策略模式是讓用戶指定更換的策略算法,而狀態模式是狀態在知足必定條件下的自動更換,用戶沒法指定狀態,最多隻能設置初始狀態。

相關文章
相關標籤/搜索