1. 程式人生 > >設計模式之組合模式&享元模式

設計模式之組合模式&享元模式

設計模式之組合模式

組合模式概念

將n個物件組合成一個樹形結構,目的是用來表示整體和區域性的層次,使得使用者對單個物件和組合物件的使用有一個整體的一致性

應用場景

  1. 需要凸顯整體和區域性關係的時候,需要使用組合模式
  2. 一個功能模組要求可以從整體獨立出來的時候,需要用組合模式

組合模式角色

1) 抽象根節點

可以使介面也可以是抽象類,這裡規定了整體統一的方法屬性

2 )具體子節點

實現(繼承)根節點的具體節點,

3 )葉子節點

是特殊的具體子節點,它不可以被繼承,即沒有子節點

組合模式原形舉例

抽象根節點
/角色一:抽象節點
public
abstract class Component { //節點名稱 每個節點都有名稱 private String nodeName; public Component(String nodeName){ this.nodeName = nodeName; } //定義一些業務邏輯 節點可以做的公共操作 public abstract void doSomeThing(); public abstract void addChild(Component child); public abstract void removeChild
(Component child); public abstract Component getComponent(int index); }
具體子節點
//角色二:具體節點
public class Composite extends Component {

    //存放節點的子節點資料
    private List<Component> componentList = new ArrayList<Component>();

    public Composite(String nodeName){
        super(nodeName);
    }

    @Override
public void doSomeThing() { Log.i("main", "具體節點"); } //增加子節點 @Override public void addChild(Component child){ this.componentList.add(child); } //刪除子節點 @Override public void removeChild(Component child){ this.componentList.remove(child); } //獲取子節點 @Override public Component getComponent(int index){ return this.componentList.get(index); } }
葉子節點
//角色三:葉子節點 final修飾 不可被繼承
public final class Leaf extends Component {

    public Leaf(String nodeName){
        super(nodeName);
    }

    @Override
    public void doSomeThing() {
        Log.i("main", "葉子節點");
    }

    @Override
    public void addChild(Component child){
        Log.i("main", "我是葉子節點,沒有子節點");
    }

    @Override
    public void removeChild(Component child){
        Log.i("main", "我是葉子節點,沒有子節點");
    }

    @Override
    public Component getComponent(int index){
        Log.i("main", "我是葉子節點,沒有子節點");
        return null;
    }

}

設計模式之享元模式

享元模式概念

使用共享物件可以有效的支援大量的細粒物件。

應用場景

  1. 系統中存在大量的相似(相同)物件。
  2. 需要緩衝池。
    快取池:執行緒池、List集合、Map集合等等…

享元模式角色

1) 享元物件(抽象)

可以使介面也可以是抽象類,這裡規定了整體統一的方法屬性

2 )具體享元物件(具體)

實現(繼承)抽象享元物件

3 )享元工廠(工廠模式:建立物件和管理物件)

享元工廠特點:需要有快取池->快取享元物件

享元模式原形舉例

案例場景:購買車票

抽象享元物件

public interface ITicket {
//共有的查詢餘票的方法
    void query(String from, String to);
}
具體享元物件
//實現抽象享元物件
public class CarTicket implements ITicket {

    @Override
    public void query(String from, String to) {
        Log.i("main", "汽車票:" + " 起點:" + from + ", 終點:" + to);
    }
}

public class TrainTicket implements ITicket {

    @Override
    public void query(String from, String to) {
        Log.i("main", "火車票:" + " 起點:" + from + ", 終點:" + to);
    }

}

享元工廠
//簡單工廠模式
public class TicketFactory {

    public enum TicketType{
        Train, Car;
    }

 //快取池 快取享元物件
    private static HashMap<TicketType, ITicket> ticketMap = new HashMap<TicketType, ITicket>();

//工廠建立票
    public static ITicket getTicket(TicketType type){
        ITicket ticket = ticketMap.get(type);
        if (ticket == null){
            if (type == TicketType.Train){
                ticket = new TrainTicket();
            } else if (type == TicketType.Car){
                ticket = new CarTicket();
            }
            ticketMap.put(type, ticket);
        }
        return ticket;
    }

}

相關推薦

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

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

設計模式(十一)模式Flyweight

Flyweight模式定義: 避免大量擁有相同內容的小類的開銷(如耗費記憶體),使大家共享一個類(元類). 為什麼使用? 面嚮物件語言的原則就是一切都是物件,但是如果真正使用起來,有時物件數可能顯得很龐大,比如,字處理軟體,如果以每個文字都作為一個物件,幾千個字,物件數就

設計模式(11)模式

tree 們的 http 模式 sign 提高 所有 lin github 模式介紹 享元模式用於創建許多小的、相關的對象,而無需為此調用大量開銷工作,從而提高性能和可維護性。 享元模式允許對象的許多實例共享它們的內在狀態,從而減少與創建它們相關的成本。 示例 我們以Sli

C#設計模式(13)——模式

1.享元模式介紹   在軟體開發中我們經常遇到多次使用相似或者相同物件的情況,如果每次使用這個物件都去new一個新的例項會很浪費資源。這時候很多人會想到前邊介紹過的一個設計模式:原型模式,原型模式通過拷貝現有物件來生成一個新的例項,使用拷貝來替代new。原型模式可以很好的解決建立多個相同/相似例項的問題,為

設計模式》學習筆記——模式

享元模式(Flyweight Pattern)是一種軟體設計模式。  它使用共享物件,用來儘可能減少記憶體使用量以及分享資訊給儘可能多的相似物件;適合用於當大量物件只是重複因而導致無法令人接受的使用大

設計模式學習筆記】模式

享元模式:主要用於減少建立物件的數量,以減少記憶體佔用和提高效能。這種型別的設計模式屬於結構型模式,它提供了減少物件數量從而改善應用所需的物件結構的方式。【菜鳥】 文章目錄 1.1 寶馬車長這樣 1.2 工廠是這樣塗裝的

設計模式(11)-模式

簡介 為什麼要使用享元模式 在系統中,有時會出現多個物件完全相同或者非常相似的情況,如果這些相似的物件過多,那麼在系統執行時,將會浪費很多的資源,導致執行代價過高,效能下降等問題。享元模式就是為了解決這一問題而出現的。享元模式運用共享技術實現相同或相似物件的

設計模式(五)模式

導航 前言 今天LZ來給大夥介紹下享元模式,這個設計模式主要用於減少建立物件的數量,以減少記憶體佔用和提高效能。在JAVA中也有很廣泛的使用,比如Integer的快取機制,在載入的時候就已經為我們初始化好了-128 到 +127的例項,放在了快取

typescript設計模式組合

abr .html hbm msl gfw targe bgm egg fff js%E4%B8%AD%E7%9A%84%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1%E5%85%A5%E9%97%A8 http://music.baidu.co

設計模式組合模式&模式

設計模式之組合模式 組合模式概念 將n個物件組合成一個樹形結構,目的是用來表示整體和區域性的層次,使得使用者對單個物件和組合物件的使用有一個整體的一致性 應用場景 需要凸顯整體和區域性關係的時候,需要使用組合模式 一個功能模組要求可以從整體獨立

java設計模式模式

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

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

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

Java設計模式模式實例詳解

AI ava flyweight lan trac home erro lin 代碼 本文實例講述了Java設計模式之享元模式。分享給大家供大家參考,具體如下: 解釋一下概念:也就是說在一個系統中如果有多個相同的對象,那麽只共享一份就可以了,不必每個都去實例化一個對象。比如

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

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

設計模式---對象性能模式模式(Flyweight)

ret 大量 根據 利用 問題 字母 只讀 時代 帶來 一:概念 通過與其他類似對象共享數據來減少內存占用 如果一個應用程序使用了太多的對象, 就會造成很大的存儲開銷。 特別是對於大量輕量級 (細粒度)的對象,比如在文檔編輯器的設計過程中,我們如果為每個字母

設計模式的藝術 結構性模式模式

前言 知道圍棋的都知道圍棋有兩種顏色的棋子,黑色和白色,不同的地方就在於他們所放置的位置不同,大體是一樣的,所以廠家生產的時候也就是批量的進行生產,反正棋子放哪他們並不需要操心,在計算機中也會存在著很多相似的物件,如果相同的物件太多將導致系統執行代價過高,記憶體屬於計算機稀缺資源,不能隨便浪費,

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

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

設計模式模式(蠅量模式

設計模式之享元模式(蠅量模式) 1. 什麼是享元模式 Flyweight模式也叫享元模式,是構造型模式之一,它通過與其他類似物件共享資料來減小記憶體佔用。 換句話說就是通過共享的方式高效地支援大量細粒度的物件。 享元模式的結構: 享元模式的角色和職責:

設計模式模式(Flyweight)

設計模式之享元模式(Flyweight) 本篇為https://github.com/iluwatar/java-design-patterns/tree/master/flyweight閱讀筆記 場景 煉金術士的商店裡擺滿了魔法藥水。許多藥水是相同的,因此不需要為每

設計模式 模式

info 如果能 實例化 應用 技術 一個 對象存儲 數量 col (一) 享元模式   享元模式 : 運用共享技術有效地支持大量細粒度的對象    (二)內部狀態和外部狀態   在享元對象內部並且不會隨環境改變而改變的共享部分,可以稱為是享元對象的內部狀態,而隨環