使用共享物件可有效地支援大量細粒度物件
因為分配太多的物件到應用程式中將有損程式的效能,同時還容易造成記憶體溢位.
1.內部狀態是物件可共享出來的資訊,儲存在享元物件的內部並且不會隨環境的改變而改變.他們可以作為乙個物件的動態附加資訊,
不必直接儲存在具體的某個物件中,屬於可以共享的部分.
2.外部狀態是物件得以依賴的乙個標記,是隨環境的改變而改變的,不可以共享的狀態,他是一批物件的統一標識,是唯一的乙個索引值.
假如有個考試報名的資訊類,考試科目和考試地點是確定的,為外部資訊,個人的id是不確定的,由具體物件確定,為內部物件,現在要建立
很多這樣的物件,用到享元模式.
/**
* * 報考資訊類
* */
public class signinfo
public void setid(string id)
public string getlocation()
public void setlocation(string location)
public string getsubject()
public void setsubject(string subject)
}
/**
* * 用於物件池中儲存物件
* */
public class signinfo4pool extends signinfo
public string getmkey()
public void setmkey(string mkey)
}
/**
* * 建立物件的工廠
* */
public class signinfofactory else
return signinfo;}}
public class client
}signinfo signinfo = signinfofactory.getsigninfo("科目1考試地點1");}}
可以大大減少應用程式建立的物件,降低程式記憶體的占用,增強程式的效能.但是它也提高了系統的複雜性,而且需要分離出內部狀態和
外部狀態.而且外部狀態具有固化性.
Java 設計模式 享元模式
在介紹享元模式之前,先來看乙個問題。假設要你去做一款撲克牌遊戲,你會針對撲克牌設計一種怎樣的資料結構呢?因為撲克牌有四種花色,也即紅桃 heart 黑桃 spade 方塊 diamond 梅花 club 有 13 種不同的大小,也即 a k 還有大小王,所以這個類應該很好設計,如下所示 public...
JAVA設計模式 享元模式
享元模式 運用共享技術有效地支援大量細粒度的物件。介面有方法,具體類實現介面中的方法,工廠生產該實體,若存在則直接返回,不存在則new乙個新的物件返回,無論客戶端呼叫多少次,只產生了乙個實體。享元模式可以避免大量非常相似類的開銷。在程式設計中,有時需要生成大量細粒度的類例項來表示資料。如果這些例項除...
設計模式(java) 享元模式
它使用共享物件,用來盡可能減少記憶體使用量以及分享資訊給盡可能多的相似物件 它適合用於只是因重複而導致使用無法令人接受的大量記憶體的大量物件。通常物件中的部分狀態是可以分享。常見做法是把它們放在外部資料結構,當需要使用時再將它們傳遞給享元。享元模式主要解決的是當系統中存在大的記憶體或物件時,且這些記...