1. 程式人生 > >裝飾模式、原型模式、模板模式、享元模式

裝飾模式、原型模式、模板模式、享元模式

相似點

這幾個從名字上都看出有複用的意思,
裝飾模式:通過對A裝飾獲得B,B擁有A的功能;
原型模型:通過clone A獲得B,B也有A的功能;
模板模式:B通過繼承A,B擁有A的功能;
享元模式:其實享元模式不應該和其他三個在一起比較,因為其他三個傾向於複用,而享元傾向於共用;享元將和單例進行比較;
下面我們將分析裝飾模式、原型模式、模板模式進行比較。

UML

裝飾模式 模板模式 原型模式

裝飾模式

當需要從一個原始類A衍生出類B時,類B不但有類A的功能,而且可能還會增加其他功能,在類A設計的時候可能根本沒有想到會有類B。這個在UI中應該應用得最多,我們可以在原生Button的基礎上重新設計出自己的Button,新設計的Button不但有原生Button的所有功能,而且可能我們還會設計的更漂亮。在這裡類A和類B都可以生成物件,B is a A,但是類B在A基礎上擴充套件了很多功能。

模板模式

模板模式和裝飾模式很相似,也是類B繼承於類A,只是類B不會對類A定義的功能進行擴充套件,而且一般情況下類A是抽象類,不能定義物件。
模板模式是非常常用的,如果你做了一段時間的面向物件程式設計,並且寫過類繼承的程式碼,那麼你百分之八十寫過模板的設計模式,只是寫的時候不知道這個簡單的寫法竟然是一個設計模式。有沒有曾經寫過類似這樣的繼承結構,定義了一個基類,它有一些virtual函式又有一些nonevirtual函式,繼承類肯定要對virtual函式進行重寫,當然對nonevirtual函式不能重寫,這就是模板模式。
模板模式是將一些固定的流程或者業務在基類中定義好(以nonevirtual存在,因為繼承類也要使用這些方法),不固定的在繼承類中去實現(當然這些是virtual方法),這樣就達到了最大限度的重用程式碼,但是還有更重要的作用:
1. 基類定義好了業務流程,這個業務流程就是nonevirtual函式進行支撐的,因為nonevirtual函式的業務邏輯無法修改,繼承類只需要根據自己的獨特性質實現virtual函
數;

原型模式

原型模式雖然也是複用,但是與裝飾和模板模式通過繼承達到複用不一樣,原型模式是複用資料。裝飾模式和模板模式是程式碼的複用,而原型模式執行是建立的物件的資料複用。所以一般原型模式的類中一般都會有clone函式。

總結

模板模式:最常用,類A定義了介面,類B繼承A,然後實現其中的介面;
裝飾模式:用於繼承並擴充套件,類A是已經設計好的某個類,類B通過繼承A擁有了A的所有性質,然後又在基礎上進行了功能擴充套件;
原型模式:它是執行階段對物件資料的複用;
享元模式:它不是複用而是共用,它和單例是同類型的模式;

相關推薦

《JAVA與模式》26天系列—第12天—模式=單例模式+工廠模式+合成模式

享元模式=單例模式+工廠模式+合成模式 單例模式: 保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點。 結構圖: 注意多執行緒的單例。 package com.bankht.Flyweight.complex; /** * @author: 特種兵—AK47

裝飾模式原型模式模板模式模式

相似點 這幾個從名字上都看出有複用的意思, 裝飾模式:通過對A裝飾獲得B,B擁有A的功能; 原型模型:通過clone A獲得B,B也有A的功能; 模板模式:B通過繼承A,B擁有A的功能; 享元模式:其實享元模式不應該和其他三個在一起比較,因為其他三個傾向於複用,而享元傾向於

用最簡單的例子說明設計模式(三)之責任鏈建造者適配器代理模式模式

def dap CA 抽象 創建 tcl cte clas eth 責任鏈模式 一個請求有多個對象來處理,這些對象是一條鏈,但具體由哪個對象來處理,根據條件判斷來確定,如果不能處理會傳遞給該鏈中的下一個對象,直到有對象處理它為止 使用場景 1)有多個對象可以處理同

java設計模式5.組合模式門面模式模式橋接模式

組合模式 在面向物件的語言中,樹結構有著巨大的威力,一個基於繼承的型別的等級結構便是一個數結構,一個基於合成的物件結構也是一個數結構。組合模式將部分與整體的關係用樹結構表示出來,使得客戶端把一個個單獨的成分物件和由它們組合而成的合成物件同等看待。 抽象構建角色:一個抽象角色,給參加組合的物

實現物件的複用——模式(五):單純複合模式模式總結

14.5 單純享元模式和複合享元模式 標準的享元模式結構圖中既包含可以共享的具體享元類,也包含不可以共享的非共享具體享元類。但是在實際使用過程中,我們有時候會用到兩種特殊的享元模式:單純享元模式和複合享元模式,下面將對這兩種特殊的享元模式進行簡單的介紹: 1

《設計模式之禪》讀書筆記-策略模式模式工廠模式門面模式混用

前一篇講的什麼是策略模式,策略模式的優缺點,在實際應用中肯定不能這麼簡單的應用,需要結合其他模式混用。比如結合門面模式解決所有策略類都需要對外暴露的缺點,使用享元模式解決多次建立例項的缺點等。 此篇是根據工作總結而來,業務需求改進與升級需要我們提供一個推送的訊息系統,經過選

學習日記之模式和Effective C++

實例 存儲 通過 由於 類型 ati 擦除 -s 當前 享元模式(Flyweight):運用共享技術有效地支持大量細粒度的對象。 (1),享元模式能夠避免大量很相似的開銷。在程序設計中,有時須要生成大量細粒度的類實例來表示數據。假設能發現這些實例除了幾個參數外基本上都是

java設計模式模式

並不是 計算 lov 這一 返回 實例 map() 角色 ron 當前咱們國家正在大力倡導構建和諧社會,其中一個很重要的組成部分就是建設資源節約型社會,“浪費可恥,節儉光榮”。在軟件系統中,有時候也會存在資源浪費的情況,例如在計算機內存中存儲了多個完全相同或者非常相似的

js40---模式

ext 北京 for arguments 性能 date logs 匿名 model /** * 享元模式是一個為了提高性能(空間復雜度)的設計模式 * 他使用與程序會生產大量的相類似的對象是耗用大量的內存的問題 */ (function(){ /**

模式

不存在 ati pan 例如 管理 而是 設計 pri 技術 享元模式:運用共享技術有效地支持大量細粒度的對象。 /// <summary> /// 抽象享元類,提供具體享元類具有的方法 /// </summary>

Head First設計模式模式(蠅量模式

logs sign face isp ria reat 定義 ogr sans 一、定義 享元模式(Flyweight Pattern)主要用於減少創建對象的數量,以減少內存占用和提高性能。這種類型的設計模式屬於結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的

12.設計模式_模式

足夠 狀態 提升 opera 構造 cnblogs 類圖 不同的 string 一、引言 在軟件開發過程,如果我們需要重復使用某個對象的時候,如果我們重復地使用new創建這個對象的話,這樣我們在內存就需要多次地去申請內存空間了,這樣可能會出現內存使用越來越多的情況,這樣的問

(@WhiteTaken)設計模式學習——模式

ken import 都是 什麽 com str 字段 浪費 -- 繼續學習享元模式。。。 乍一看到享元的名字,一頭霧水,學習了以後才覺得,這個名字確實比較適合這個模式。 享元,即共享對象的意思。   舉個例子,如果制作一個五子棋的遊戲,如果每次落子都實例化一個對象的話

C#設計模式之十一模式(Flyweight Pattern)【結構型】

eal 客戶 來看 滿足 對象狀態 英文 輔助 3.3 fig 原文:C#設計模式之十一享元模式(Flyweight Pattern)【結構型】一、引言 今天我們要講【結構型】設計模式的第六個模式,該模式是【享元模式】,英文名稱是:Flyweight Pattern。還

淺談js設計模式模式

func 參數 如何 del 如果 性能優化 情況 under 核心 享元(flyweight)模式是一種用於性能優化的模式,“fly”在這裏是蒼蠅的意思,意為蠅量級。享元模式的核心是運用共享技術來有效支持大量細粒度的對象。 假設有個內衣工廠,目前的產品有 50種男式內衣和

結構型模式模式

控制 hit 工廠 否則 != n) 類和對象 main 實體 享元模式(Flyweight Pattern):運用共享技術有效地支持大量細粒度對象的復用。系統只使用少量的對象,而這些對象都很相似,狀態變化很小,可以實現對象的多次復用。由於享元模式要求能夠共享的對象必須是細

設計模式模式(7)

turn actually 一個 享元模式 rom imp import pat 兩個 享元模式(Flyweight Pattern)主要用於減少創建對象的數量,以減少內存占用和提高性能。這種類型的設計模式屬於結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的方式

4.泡妞與設計模式(四)模式

sage eight 客戶端 pms AI 一個 div 創建 stdlib.h FLYWEIGHT 享元模式 享元模式:FLYWEIGHT在拳擊比賽中指最輕量級。享元模式以共享的方式高效的支持大量的細粒度對象。享元模式能做到共享的關鍵是區分內蘊狀態和外蘊狀態。內蘊狀態存儲

模式的簡單使用

int 部分 差異 允許 print art HA 鍵值對 但是 前言 享元模式是一種軟件設計模式,是對象池的一種實現,其目的在於盡可能的減少內存的使用量,內存屬於稀缺資源,如果在一個系統中有很多個完全相同或相似的對象,我們就可以使用享元模式,讓他們共享一份內存,不必每

設計模式——模式

.post 運行時間 AD 重復 this com 本地 方式 sign 享元模式定義 復用內存中已經存在的對象,降低重復創建對象的性能消耗。 享元模式 UML圖 享元共享技術 享元中內部狀態時共享的,Flyweight factory負責維護一個對象池(Flyweigh