1. 程式人生 > >設計模式(十):享元模式

設計模式(十):享元模式

優點:

  減少了系統中物件的數量,避免了大量細粒度物件給記憶體帶來的壓力,實現對細粒度物件的複用。

缺點:

  此模式需要維護一個記錄了系統已有的所有享元物件的列表,本身就需要耗費資源。此外此模式需要將一些狀態外部化,也使得系統及邏輯更加複雜。

適用範圍:

  一個系統中有大量的物件,同時這些物件耗費大量的記憶體,這些物件內部狀態可提取分組,外部狀態可外部化。

客戶端: 

  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 (用於建立網站歸屬人)
  *
  
*/