設計模式之享元模式

2021-08-27 23:14:29 字數 1168 閱讀 1087

場景:

記憶體屬於稀缺資源,不要隨便浪費。如果有很多個完全相同或相似的物件,我們可以通過享元模式,節省記憶體

核心

享元物件能夠做到共享的關鍵是區分了內部狀態和外部狀態

內部狀態:可以共享,不會隨環境變化而改變

外部狀態:不可以共享,會隨環境的變化而改變 

簡單享元結構

復合享元模式的結構

統比一下單純享元物件和復合享元物件,裡面只多出了乙個復合享元角色,但是它的結構就發生了很大的變化。我們還是使用類圖來表示下:

結構圖

**示例

/**

* 享元類

*/public inte***ce chessflyweight

class concretechess implements chessflyweight

@override

public void setcolor(string color)

@override

public string getcolor()

@override

public void display(coordinate coordinate)

}/**

* 外部狀態

*/public class coordinate

public int getx()

public void setx(int x)

public int gety()

public void sety(int y)

}/**

* 享元工程類

*/public class chessflyweightfactory else

}public class client

}

應用場景:

享元模式由於其共享的特性,可以在任何「池」中操作,比如:執行緒池、資料庫連線池

優點:

缺點:

設計模式之享元模式

1 享元模式運用共享技術有效地支援大量細粒度的物件。uml圖如下 2 思考 flyweight根據客戶需求返回已經生成好的物件,但一定要事先生成物件例項嗎?答 實際上是不一定需要的,完全可以初始化的時候什麼也不做,到需要的時候,再去判斷物件是否為null來決定是否例項化。3 思考 為什麼要有unsh...

設計模式之 享元模式

享元模式英文稱為 flyweight pattern 又譯為羽量級模式或者蠅量級模式。享元模式的定義為 採用乙個共享類來避免大量擁有相同內容的 小類 的開銷。這種開銷中最常見 直觀的影響就是增加了記憶體的損耗。享元模式以共享的方式高效的支援大量的細粒度物件,減少其帶來的開銷。在名字和定義中都體現出了...

設計模式之享元模式

享元模式運用共享技術有效地支援大量細粒度的物件。如果乙個應用程式使用了大量的物件,而大量的這些物件造成了很大的儲存開銷時應該考慮使用。物件的大多數狀態可以是外部狀態,如果刪除物件的外部狀態,那麼可以用相對較少的共享物件取代很多組物件,此時也可以考慮用享元模式。享元模式uml圖如下 如下 使用者 cl...