20、FlyWeight 享元模式
阿新 • • 發佈:2020-08-06
池化的思想
1、Flyweight享元模式
運用共享技術有效地支持大量細粒度對象的復用。系統只使用少量的對象,而這些對象都很相似,狀態變化很小,可以實現對象的多次復用。由於享元模式要求能夠共享的對象必須是細粒度對象,因此它又稱為輕量級模式,它是一種對象結構型模式。
面向對象很好地解決了“抽象”的問題,但是必不可免地要付出一定的代價。對於通常情況來說,面向對象的成本大都可以忽略不計。但是某些情況,面向對象所帶來的成本必須謹慎處理。
意圖:運用共享技術有效地支持大量細粒度的對象。
主要解決:在有大量對象時,有可能會造成內存溢出,我們把其中共同的部分抽象出來,如果有相同的業務請求,直接返回在內存中已有的對象,避免重新創建。
何時使用: 1、系統中有大量對象。2、這些對象消耗大量內存。3、這些對象的狀態大部分可以外部化。4、這些對象可以按照內蘊狀態分為很多組,當把外蘊對象從對象中剔除出來時,每一組對象都可以用一個對象來代替。5、系統不依賴於這些對象身份,這些對象是不可分辨的。
使用場景: 1、系統有大量相似對象。2、需要緩衝池的場景。
2、示例代碼
使用享元模式來設計圍棋軟件中的棋子
IgoChessman充當抽象享元類,BlackIgoChessman和WhiteIgoChessman充當具體享元類,IgoChessmanFactory充當享元工廠類。完整代碼如下所示:
importjava.util.*;
//圍棋棋子類:抽象享元類
abstractclassIgoChessman{
publicabstractStringgetColor();
publicvoiddisplay(){
System.out.println("棋子顏色:"+this.getColor());
}
}
//黑色棋子類:具體享元類
classBlackIgoChes