設計模式之享元模式

2021-10-01 05:20:44 字數 1514 閱讀 5626

本篇介紹結構型模式中的享元模式。

運用共享技術有效的支援大量細粒度的物件。

使用享元模式可以防止系統中產生過多同乙個類的類似的物件,這裡的類似物件指的是有些屬性值是相同的,有些屬性值是不同的。而相同的部分在享元模式中又被稱為內部狀態,不同的部分又被稱為外部狀態。內部狀態是不會變的,外部狀態通常會隨著環境的改變而改變。

例如富士康如果每生產一部iphone就new乙個iphone物件,給系統的壓力山大,這個時候我們就可以使用享元模式。假如iphone11除了顏色其他都是相同的,那顏色就可以作為享元模式的外部狀態,其他例如處理器就可以作為內部狀態,即對於iphone11來說處理器是可以共享的,都是a13處理器。

抽象享元角色:iphone11類,定義了傳入外部狀態的方法;

具體享元角色:colorediphone11類,共享類;

享元工廠:workshop類,用來建立和管理享元物件,維護的池中有此物件則返回,無此物件則new乙個,單例的。

抽象享元角色:

abstract class iphone11 

abstract void showcolor();

}

具體享元角色:

class colorediphone11 extends iphone11 

@override

void showcolor()

}

享元工廠:

class workshop 

public iphone11 getiphone11(string color) else

return iphone11;

} private static class foxconn

public static workshop getworkshop()

}

測試程式及輸出結果:

//測試程式

public static void main(string args)

//輸出結果

富士康成立啦...

********單例模式********

車間1 workshop1與車間2 workshop2是否是同乙個車間呢:true

********享元模式********

我買的是黑色的iphone11...

我買的是紅色的iphone11...

我買的是黑色的iphone11...

黑色的iphone11和紅色的iphone11是同乙個物件麼:false

兩個黑色的iphone11是同乙個物件麼:true

內部狀態對於同一享元是不變的,外部狀態則決定了是否為同一享元物件,根據客戶端傳入的引數的改變而改變。享元模式與單例模式的差別在於單例模式中乙個類的物件只有唯一乙個,享元模式的物件會有多個,每個物件之間的差異在於外部狀態。

設計模式之享元模式

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

設計模式之 享元模式

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

設計模式之享元模式

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