设计模式之享元模式

来源:互联网 发布:网络贷款的弊端 编辑:程序博客网 时间:2024/06/16 21:36

1,为什么要使用享元设计模式

一天,我和我的同事去书城看书,我们同时看上了一本叫“大鸟linux私房菜”的书,但是为了节约钱我们只想买一本.这里买一本从设计模式的角度来说就是享元设计模式. 

2,什么是享元设计模式

运用共享技术有效的支持大量细粒度的对象.

3,怎么使用享元设计模式

比如说现在有两个读者一个是读者A,一个是读者B,共享3本书“鸟哥的linux私房菜”,“java高级编程”,“大话设计模式”,现在我们利用享元设计模式去完成这个需求.

UML:


代码:

ShareBook.class

public class ShareBook {private String name;public ShareBook(String name){this.name = name;}}

ShareBookHelper.class

public class ShareBookHelper {private static ShareBookHelper shareBookHelper = null;private HashMap<String, ShareBook> bookHashMap = new HashMap<String, ShareBook>();private ShareBookHelper(){bookHashMap.put("鸟哥的linux私房菜", new ShareBook("鸟哥的linux私房菜"));bookHashMap.put("大话设计模式", new ShareBook("大话设计模式"));bookHashMap.put("java高级编程", new ShareBook("java高级编程"));}public ShareBook getBook(String key){return bookHashMap.get(key);}public static ShareBook getShareBook(String key){if(shareBookHelper == null){shareBookHelper = new ShareBookHelper();}return shareBookHelper.getBook(key); }}

Reader.class

public class Reader {public static void main(String [] args){ShareBook readerA = ShareBookHelper.getShareBook("鸟哥的linux私房菜");ShareBook readerB = ShareBookHelper.getShareBook("鸟哥的linux私房菜");//判断读者A是否与读者B享元(同一个对象)System.out.println("if the same object : "+readerA.equals(readerB));}}
最后运行结果:

if the same object : true