Gof 享元模式

2021-10-17 15:12:23 字數 1565 閱讀 9701

繼續打卡設計模式

今天來聊一下享元模式

享元模式 也叫蠅量模式,運用共享技術有效支援大量細粒度的物件

常用於底層系統開發,解決系統的效能問題,像資料庫連線池。

首先提出乙個實際的需求

有客戶要求以新聞的形式發布

有客戶人要求以部落格的形式發布

那麼現在解決這個問題我們出發點可能就是說在把原來的東西複製乙份然後簡單的修改一下。但是大家稍微想想都很清楚裡面的很多東西是相似的,也就是說改動量並不是很大,那就是說對於開發者來講很多東西是可以拿來就用的

那我先這樣吧,這個需求是給多個客戶定製化開發的我們就先來個user類

/**

* @author: 德鑫

* description: 使用者類

* @date: 2021/01/22

*/public class user

public string getname()

public void setname(string name)

}

緊接著我們就來個官網

/**

* @author: 德鑫

* description:

* @date: 2021/01/22

*/public abstract class website

那隨後寫乙個定義**型別的類

/**

* @author: 德鑫

* description:

* @date: 2021/01/22

*/public class concretewebsite extends website

@override

public void use(user user)

}

這個類可以看到繼承**類 有乙個共享的狀態

現在我們需要有乙個工廠類來建造,這個工廠類的主要作用是用來根據建設型別的不同生成不同的**,為了池化資源。我們利用hashmap的特性來模擬

/**

* @author: 德鑫

* description: 享元模式

* @date: 2021/01/22

*///**工廠類,需要返回乙個**

public class websitefactory

return (website)map.get(type);

}public integer getwebsitecount()

}

最後寫乙個客戶端測試

public class client 

}

1、享元模式常用於系統底層開發解決系統的效能問題。像資料庫連線池,裡面都是建立好的連線物件,在這些連線物件 中有我們需要的則直接拿來用,避免重新建立

2、享元模式能夠解決重複物件的記憶體浪費的問題,當系統中有大量相似物件,需要緩衝池時。不需總是建立新對 象,可以從緩衝池裡拿。這樣可以降低系統記憶體,同時提高效率

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

GOF之享元模式

物件導向的代價 物件導向很好的解決了系統抽象問題,同時在大多數情況下,也不會損及系統的效能。但是,在某些特殊的應用中,由於物件的數量太大,採用物件導向會給系統帶來難以承受的記憶體開銷。比如圖形應用中的圖元等物件 字處理應用中的字元物件等。動機 motivation 採用純粹物件方案的問題在於大量細粒...

設計模式(享元模式)

享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...

設計模式 享元模式

享元模式flyweight flyweight 模式是乙個提高程式效率和效能的模式 會大大加快程式的執行速度。把物件中使用比較多,具有共同點的,拿出來做成乙個共享類,這樣就行成了共享模式。如 integer 物件在 128 127 使用的是同乙個物件。在這之間是共享的。享元中的角色 flyweigh...