<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
享元模式(FlyWeight Pattern),也叫蠅量模式,運用共用技術,有效的支援大量細粒度的物件,享元模式就是池技術的重要實現方式。
我們接了一個小型的外包專案,給客戶老王做一個產品展示網頁,老王的朋友們感覺效果不錯,也希望做這樣的產品展示網頁,但是他們要求都有些不同
1)有客戶要求網頁以新聞的形式釋出
2)有客戶要求網頁以部落格的形式釋出
3)有客戶希望網頁以微信公眾號的形式釋出
定義網站使用者類
public class User { private String name; public User(String name){ this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
定義網站抽象類——享元角色
public abstract class Website { public abstract void show(User user); }
定義具體的網站類——具體的享元角色
public class ConcreteWebsite extends Website{ // 網站的釋出形式 private String type; public ConcreteWebsite(String type){ this.type = type; } @Override public void show(User user) { System.out.println("以" + type + "形式釋出網站"); System.out.println("網站的使用者名稱是:" + user.getName()); } }
定義網站工廠類——享元工廠類
public class WebsiteFactory { // 建立HashMap,充當池的角色 private HashMap<String, ConcreteWebsite> pool = new HashMap<String, ConcreteWebsite>(); // 根據型別判斷,獲取池子裡的物件 public Website getWebsite(String type){ if(!pool.containsKey(type)){ pool.put(type,new ConcreteWebsite(type)); } return pool.get(type); } // 獲取池子裡的物件總數 public int getWebsiteCount(){ System.out.println("當前池子裡的物件總數:" + pool.size()); return pool.size(); } }
定義使用者端測試類
public class Client { public static void main(String[] args) { //建立一個享元工廠 WebsiteFactory websiteFactory = new WebsiteFactory(); Website news = websiteFactory.getWebsite("新聞"); news.show(new User("老李")); Website wechat = websiteFactory.getWebsite("部落格"); wechat.show(new User("老高")); websiteFactory.getWebsiteCount(); Website wechat1 = websiteFactory.getWebsite("微信"); wechat.show(new User("老沈")); websiteFactory.getWebsiteCount(); } }
檢視測試結果
通過一個工廠類來根據不同型別的需求,從而生成對應的具體的享元物件,實現了需求。其中享元物件的資訊分為兩個部分,內部狀態和外部狀態。內部物件是指物件共用出來的資訊,儲存在享元物件內部,不隨著環境的改變而改變,外部物件隨著環境的改變而改變,不可共用的狀態。
優勢
節省記憶體空間,重複物件需要被頻繁建立的時候,享元模式由於只會被建立一次,所以對系統的記憶體空間的需求大大減小
提高使用效率,對於可重複的物件只建立一次,再次存取時直接從池子裡拿,相應速度更快,效率也會更高侷限性享元模式會提高
劣勢
享元模式會提高系統的複雜度,享元模式需要有一個工廠類加以控制,如果盲目使用,會提高系統邏輯的複雜度
使用場景
享元模式最經典的使用場景就是我們各類池技術了
系統中有大量物件的時候,這些物件消耗大量記憶體,可以考慮使用享元模式
到此這篇關於Java設計模式之享元模式範例詳解的文章就介紹到這了,更多相關Java享元模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45