笔者很少用到享元模式,在笔者看来,享元模式解决内存问题用的应该会比较多,java中我们常用的String就是利用享元模式的思想来解决内存问题的
先看下类图
大话设计模式-类图
在看下笔者的demo
/** * 网站接口 */ public interface IWeb { public void sayMyself(); }
/** * 网站实现类 */ public class CurrentWeb implements IWeb{ private String name; public CurrentWeb(String name) { super(); this.name = name; } @Override public void sayMyself() { System.out.println(name); } }
/** * 网站工厂 */ public class WebFactory { private Map<String, IWeb> webMap = new HashMap<>(); public IWeb getWeb(String key) { if (!webMap.containsKey(key)) { webMap.put(key, new CurrentWeb(key)); } return webMap.get(key); } public int getWebCount() { return webMap.size(); } }
/** * 客户端 */ public class Test { public static void main(String[] args) { WebFactory factory = new WebFactory(); IWeb web = factory.getWeb("博客园"); web.sayMyself(); IWeb web1 = factory.getWeb("博客园"); web1.sayMyself(); IWeb web2 = factory.getWeb("空间"); web2.sayMyself(); System.out.println(web == web1); System.out.println(factory.getWebCount()); } }
输出结果为
博客园 博客园 空间 true 2
享元模式笔者使用的比较少,可能理解的不够深入。希望demo能够帮助读者。