Java 实现享元(Flyweight)模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 实现享元(Flyweight)模式相关的知识,希望对你有一定的参考价值。
/** * 字母 * @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====1 map.size====2 map.size====2 map.size====3 map.size====4 map.size====5 map.size====5 [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
以上是关于Java 实现享元(Flyweight)模式的主要内容,如果未能解决你的问题,请参考以下文章