享元模式(Flyweight)Java
來(lái)源:程序員人生 發(fā)布時(shí)間:2016-06-16 17:51:16 閱讀次數(shù):2644次
定義:
享元模式:避免大量具有相同內(nèi)容的小類(lèi)的開(kāi)消(如耗費(fèi)內(nèi)存),使大家同享1個(gè)類(lèi)(元類(lèi)).
結(jié)構(gòu)圖:

WebSite:
package ding.study.designpatterns.flyweight;
/**
* 網(wǎng)站抽象類(lèi)
* @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;
/**
* 網(wǎng)站實(shí)現(xiàn)類(lèi)
* @author daniel
* @email 576699909@qq.com
* @time 2016⑸⑶0 上午10:51:35
*/
public class WebSiteImpl extends WebSite{
//網(wǎng)站分類(lèi)名稱(chēng)
private String name="";
/**
* 構(gòu)造函數(shù)
* @param name
*/
public WebSiteImpl(String name){
this.name=name;
}
/**
* 顯示名稱(chēng)
*/
@Override
public void use() {
System.out.println("網(wǎng)站分類(lèi):"+this.name);
}}
WebSiteImpl
package ding.study.designpatterns.flyweight;
import java.util.Hashtable;
/**
* 網(wǎng)站工廠
*
* @author daniel
* @email 576699909@qq.com
* @time 2016⑸⑶0 上午10:52:25
*/
public class WebSiteFactory {
private Hashtable<String, WebSite> flyweights = new Hashtable<String, WebSite>();
/**
* 取得網(wǎng)站分類(lèi)
* 這里可以有多個(gè)網(wǎng)站實(shí)現(xiàn)類(lèi)
* @param key
* @return
*/
public WebSite getWebSiteCategory(String key) {
if (!flyweights.containsKey(key)) {
flyweights.put(key, new WebSiteImpl(key));
}
return (WebSite) flyweights.get(key);
}
/**
* 取得網(wǎng)站分類(lèi)總數(shù)
*
* @return
*/
public int getWebSiteCount() {
return flyweights.size();
}
}
ZTestMain
package ding.study.designpatterns.flyweight;
/**
* 享元模式(Flyweight):應(yīng)用同享技術(shù)有效地支持大量細(xì)粒度的對(duì)象。
*
* 避免大量具有相同內(nèi)容的小類(lèi)的開(kāi)消(如耗費(fèi)內(nèi)存),使大家同享1個(gè)類(lèi)(元類(lèi)).
輸出結(jié)果
* @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("科技類(lèi)");
fx.use();
WebSite fx1=f.getWebSiteCategory("新聞?lì)?quot;);
fx1.use();
WebSite fx2=f.getWebSiteCategory("文娛類(lèi)");
fx2.use();
WebSite fy=f.getWebSiteCategory("博客");
fy.use();
WebSite fz=f.getWebSiteCategory("博客");
fz.use();
System.out.println("網(wǎng)站分類(lèi)總數(shù)為:"+f.getWebSiteCount());
}
}
輸出結(jié)果:

源代碼:
https://github.com/dingsai88/StudyTest/tree/master/src/ding/study/designpatterns/flyweight
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)