java设计模式——享元模式

来源:互联网 发布:富士通扫描仪软件 编辑:程序博客网 时间:2024/05/01 04:54

《大话设计模式》第二十六章

package ch26;public class User {private String name;public User(String name) {this.name = name;}public String getName() {return name;}}


 

package ch26;public abstract class Website {public abstract void use(User user);}


 

package ch26;public class ConcreteWebsite extends Website {private String name;public ConcreteWebsite(String name) {this.name = name;}@Overridepublic void use(User user) {System.out.println("网站分类:" + name + ",用户:" + user.getName());}}


 

package ch26;import java.util.HashMap;import java.util.Map;public class WebsiteFactory {private Map<String, Website> flyweights = new HashMap<String, Website>();public Website getWebsiteCategory(String key) {if (!flyweights.containsKey(key)) {flyweights.put(key, new ConcreteWebsite(key));}return flyweights.get(key);}public int getWebsiteCount() {return flyweights.size();}}


 

package ch26;/** * 享元模式 * @author Administrator * */public class Client {/** * @param args */public static void main(String[] args) {WebsiteFactory f = new WebsiteFactory();Website fx = f.getWebsiteCategory("产品展示");fx.use(new User("小菜"));Website fy = f.getWebsiteCategory("产品展示");fy.use(new User("大鸟"));Website fz = f.getWebsiteCategory("产品展示");fz.use(new User("娇娇"));Website fl = f.getWebsiteCategory("博客");fl.use(new User("老顽童"));Website fm = f.getWebsiteCategory("博客");fm.use(new User("桃谷六仙"));Website fn = f.getWebsiteCategory("博客");fn.use(new User("南海鳄神"));System.out.println("得到网站分类总数:" + f.getWebsiteCount());}}


运行

网站分类:产品展示,用户:小菜网站分类:产品展示,用户:大鸟网站分类:产品展示,用户:娇娇网站分类:博客,用户:老顽童网站分类:博客,用户:桃谷六仙网站分类:博客,用户:南海鳄神得到网站分类总数:2


上面的关键代码是:

public Website getWebsiteCategory(String key) {if (!flyweights.containsKey(key)) {flyweights.put(key, new ConcreteWebsite(key));}return flyweights.get(key);}


JDK中的Integer.valueOf是经典例子,其代码如下:

    public static Integer valueOf(int i) {final int offset = 128;if (i >= -128 && i <= 127) { // must cache     return IntegerCache.cache[i + offset];}        return new Integer(i);    }


 

原创粉丝点击