設計模式(十):享元模式
阿新 • • 發佈:2019-01-08
優點:
減少了系統中物件的數量,避免了大量細粒度物件給記憶體帶來的壓力,實現對細粒度物件的複用。
缺點:
此模式需要維護一個記錄了系統已有的所有享元物件的列表,本身就需要耗費資源。此外此模式需要將一些狀態外部化,也使得系統及邏輯更加複雜。
適用範圍:
一個系統中有大量的物件,同時這些物件耗費大量的記憶體,這些物件內部狀態可提取分組,外部狀態可外部化。
客戶端:
WebSiteFactory f = new WebSiteFactory(); //生產的工廠
WebSite wx = f.getWebSiteCategory("部落格");
wx.belongToUser(new User("小菜"));
//專屬網站
WebSite my = f.getWebSiteCategory("專屬"); //"專屬"是區分標識
my.belongToUser(new User("書生"));
System.out.println("網站分類總數:"+f.getWebSiteCategoryCount());
一句話概括:
針對不同客戶的同種型別的網站的需求,使用同一套核心程式碼,避免程式碼複製。
/** * WebSite (介面,belongToUser(User user)方法) * ConcreteWebSite(共享例項) UnShareConcreteWebSite(不共享例項) * * WebSiteFactory(生產工廠,包括網站列表、分類建立方法、已建立分類個數等方法) -- 建立和管理所有人的“網站”物件 * * User (用於建立網站歸屬人) **/