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)模式的主要内容,如果未能解决你的问题,请参考以下文章

JAVA设计模式之享元模式(flyweight)

11-享元(Flyweight)模式Ruby实现

JAVA SCRIPT设计模式--结构型--设计模式之FlyWeight享元模式(11)

Java设计模式:Flyweight(享元)模式

Flyweight 享元(结构型)

享元模式(Flyweight)