享元模式(Flyweight)Java
來源:程序員人生 發布時間:2016-06-16 17:51:16 閱讀次數:2649次
定義:
享元模式:避免大量具有相同內容的小類的開消(如耗費內存),使大家同享1個類(元類).
結構圖:

WebSite:
package ding.study.designpatterns.flyweight;
/**
* 網站抽象類
* @author daniel
* @email 576699909@qq.com
* @time 2016⑸⑶0 上午10:50:31
*/
public abstract class WebSite {
public abstract void use();
}
WebSiteFactory
package ding.study.designpatterns.flyweight;
/**
* 網站實現類
* @author daniel
* @email 576699909@qq.com
* @time 2016⑸⑶0 上午10:51:35
*/
public class WebSiteImpl extends WebSite{
//網站分類名稱
private String name="";
/**
* 構造函數
* @param name
*/
public WebSiteImpl(String name){
this.name=name;
}
/**
* 顯示名稱
*/
@Override
public void use() {
System.out.println("網站分類:"+this.name);
}}
WebSiteImpl
package ding.study.designpatterns.flyweight;
import java.util.Hashtable;
/**
* 網站工廠
*
* @author daniel
* @email 576699909@qq.com
* @time 2016⑸⑶0 上午10:52:25
*/
public class WebSiteFactory {
private Hashtable<String, WebSite> flyweights = new Hashtable<String, WebSite>();
/**
* 取得網站分類
* 這里可以有多個網站實現類
* @param key
* @return
*/
public WebSite getWebSiteCategory(String key) {
if (!flyweights.containsKey(key)) {
flyweights.put(key, new WebSiteImpl(key));
}
return (WebSite) flyweights.get(key);
}
/**
* 取得網站分類總數
*
* @return
*/
public int getWebSiteCount() {
return flyweights.size();
}
}
ZTestMain
package ding.study.designpatterns.flyweight;
/**
* 享元模式(Flyweight):應用同享技術有效地支持大量細粒度的對象。
*
* 避免大量具有相同內容的小類的開消(如耗費內存),使大家同享1個類(元類).
輸出結果
* @author daniel
* @email 576699909@qq.com
* @time 2016⑸⑶0 上午10:53:34
*/
public class ZTestMain {
/**
* @author daniel
* @time 2016⑸⑶0 上午10:53:24
* @param args
*/
public static void main(String[] args) {
WebSiteFactory f=new WebSiteFactory();
WebSite fx=f.getWebSiteCategory("科技類");
fx.use();
WebSite fx1=f.getWebSiteCategory("新聞類");
fx1.use();
WebSite fx2=f.getWebSiteCategory("文娛類");
fx2.use();
WebSite fy=f.getWebSiteCategory("博客");
fy.use();
WebSite fz=f.getWebSiteCategory("博客");
fz.use();
System.out.println("網站分類總數為:"+f.getWebSiteCount());
}
}
輸出結果:

源代碼:
https://github.com/dingsai88/StudyTest/tree/master/src/ding/study/designpatterns/flyweight
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈