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]
时间: 2024-10-18 10:28:45

Java 实现享元(Flyweight)模式的相关文章

Java设计模式——享元模式

概述 在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 本文作者:Coding-Naga 发表日期: 2016年4月25日 本文链接:http://blog.csdn.net/lemon_tree12138/article/details/51241598 来源:CSDN 更多内容:分类 >> 设计模式 目录 概述 版权说明 目录

java设计模式--享元模式

享元模式(flyweight) 当需要有很多完全相同或相似的对象需要创建的时候,主要是相似的时候,我们可以用享元模式.尽可能少创建对象,节省内存. 享元模式主要有4中角色 1.享元的工厂 2.抽象享元对象 2.内部状态对象:可以共享的 3.外部状态对象:不可以共享的 下面以围棋的棋子为例:每个棋子都是一个对象,但是每个棋子的大部分都一样,只有颜色,摆放位置不一样,这样就没必要每个棋子都创建一个对象,把相同的和不同的分离开来. //享元类抽象 public interface FlyWeight

JAVA 设计模式 享元模式

用途 享元模式 (Singleton) 运用共享技术有效地支持大量细粒度的对象. 结构 图-享元模式结构图 Flywight : 它是所有具体享元类的超类或接口,通过这个接口,Flyweight 可以接受并作用于外部状态. abstract class Flyweight {     public abstract void Operation(int extrinsicstates); } ConcreteFlyweight :  是继承 Flyweight 超类或实现 Flyweight 接

java 之 享元模式(大话设计模式)

笔者很少用到享元模式,在笔者看来,享元模式解决内存问题用的应该会比较多,java中我们常用的String就是利用享元模式的思想来解决内存问题的 先看下类图 大话设计模式-类图 在看下笔者的demo /** * 网站接口 */ public interface IWeb { public void sayMyself(); } /** * 网站实现类 */ public class CurrentWeb implements IWeb{ private String name; public Cu

c++ 结构型模式-享元(Flyweight)

1) 意图: 运用共享技术有效的支持大量细粒度的对象.(理解享元模式,主要是对象被分解成intrinsic和extrinsic两部分,即内部的共享状态和外部状态) 2) 结构: 其中: Flyweight描述一个接口,通过这个接口Flyweight可以接受并作用于外部状态 ConcreteFlyweight实现Flyweight接口,并为内部状态增加存储空间 UnsharedConcreteFlyweight不需要共享的外部状态 FlyweightFactory创建并管理Flyweight对象

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

概念定义 享元(Flyweight)模式运用共享技术高效地支持大量细粒度对象的复用. 当系统中存在大量相似或相同的对象时,有可能会造成内存溢出等问题.享元模式尝试重用现有的同类对象,如果未找到匹配的对象则创建新对象,从而减少系统中重复创建对象实例的性能和内存消耗. 享元模式将对象的信息分为两个部分:内部状态(Internal State)和外部状态(External State).内部状态是对象可共享出来的信息,存储在享元对象内部并且不会随环境改变而改变.外部状态是随环境改变而改变的.不可共享的

JavaScript设计模式总结-享元模式

享元(flyweight)模式的主要作用:性能优化 当系统创建过多相似的对象而导致内存占用过高,可以采用这种设计模式进行优化. 享元模式将对象的属性区分为内部状态与外部状态 内部状态在创建的时候赋值,外部状态在实际需要用到的时候进行动态赋值 对于内部状态和外部状态的区分,有2点: 1.内部状态存储于对象内部 2.内部状态可以被一些对象共享 3.内部状态独立于具体场景,通常不会改变 4.外部状态取决于具体场景,并根据场景变化,外部状态不能被共享. 举例 1.男女模特试衣服 若为每个模特对象Mode

《JAVA与模式》之享元模式

Flyweight在拳击比赛中指最轻量级,即"蝇量级"或"雨量级",这里选择使用"享元模式"的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. Java中的String类型 在JAVA语言中,String类型就是使用了享元模式.String对象是final类型,对象一旦创建就不可改变.在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝.Stri

《Java设计模式》之享元模式

Flyweight在拳击比赛中指最轻量级,即"蝇量级"或"雨量级",这里选择使用"享元模式"的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. Java中的String类型 在JAVA语言中,String类型就是使用了享元模式.String对象是final类型,对象一旦创建就不可改变.在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝.Stri