Java 实现享元(Flyweight)模式

来源:互联网 发布:淘宝2016年韩版羽绒服 编辑:程序博客网 时间:2024/06/05 08:25
/** * 字母 * @author stone * */public class Letter {private String name;public Letter(String name) {this.name = name;}public String getName() {return name;}}
/** * 一个产生字母对象的 享元工厂(单例工厂) * @author stone * */public class LetterFactory {private Map<String, Letter> map;private static LetterFactory instance = new LetterFactory();private LetterFactory() {map = new HashMap<String, Letter>();}public static LetterFactory getInstance() {return instance;}public void add(Letter letter) {if (letter != null && !map.containsKey(letter.getName())) {map.put(letter.getName(), letter);}System.out.println("map.size====" + map.size());}public Letter get(String name) {return map.get(name);}}

/* * 享元(Flyweight)模式结构型模式主要目的是实现对象的共享 * 字面上看就是 一个 共享元件的模式,这里是将 一些在系统中需要重复使用的对象,共享成单个元件 *  *  像JDBC数据库连接池、线程池等 都是应用了享元模式 *  数据库连接池: 创建了一定数量的连接,存入池中,用到时取出,释放时再存入 *  池程池:类似,也是 用到时取出,释放时再存入 *  所以一般 都会有一个集合来存储元件;有一个享元工厂进行元件的管理。 */public class Test {public static void main(String[] args) {LetterFactory factory = LetterFactory.getInstance();String word = "easiness";addLetterByName(factory, word);getLetter(factory, word);}//添加字母对象static void addLetterByName(LetterFactory factory, String word) {for (char c : word.toCharArray()) {factory.add(new Letter(c + ""));}}//输出字母对象static void getLetter(LetterFactory factory, String word) {for (char c : word.toCharArray()) {System.out.println(factory.get(c + ""));}}}

打印

map.size====1map.size====2map.size====2map.size====3map.size====4map.size====5map.size====5flyweight.Letter@3343c8b3flyweight.Letter@272d7a10flyweight.Letter@3343c8b3flyweight.Letter@1aa8c488flyweight.Letter@3dfeca64flyweight.Letter@22998b08flyweight.Letter@1aa8c488


0 0
原创粉丝点击