0-前言
享元模式定義:運用共享技術有效地支援大量細粒度的物件。
1-實現
1-1、簡單UML圖:
1-2、程式碼實現
//1、抽象父類(網站父類) abstract class Website { public abstract void Use( String username); } //2、具體共享類(具體網站類) class ConcreteWebsite extends Website { private String websiteclassname; public ConcreteWebsite(String name) { this.websiteclassname = name; } @Override public void Use(String username) { System.out.println("網站分類:"+ websiteclassname +"--使用者:"+username); } } //3、享元工廠類(網站工廠) class WebsiteFactory { private Hashtable<String , Website> websites =new Hashtable<>(); public Website getWebsite(String classname) { if (!websites.containsKey(classname)) { websites.put(classname, new ConcreteWebsite(classname)); } return websites.get(classname); } }
客戶端:
WebsiteFactory wf = new WebsiteFactory(); Website fs = wf.getWebsite("企業官網"); fs.Use("張三"); Website fs1 = wf.getWebsite("部落格"); fs1.Use("李四"); Website fs2 = wf.getWebsite("小程式"); fs2.Use("王五");
執行結果:
2-應用場景簡單總結
1、一個程式使用了大量物件時;
2、由於使用了大量物件造成比較大的儲存開銷時;
3、物件的很多狀態都可以改變為外部狀態時;