`

13、享元模式

 
阅读更多

享元模式

1、定义

享元模式(FlyWeight),运用共享技术有效的支持大量细粒度的对象。

 

2、结构图

 

 

单纯享元模式所涉及到的角色如下:

  ●  抽象享元(Flyweight)角色 :给出一个抽象接口,以规定出所有具体享元角色需要实现的方法。

  ●  具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定出的接口。如果有内蕴状态的话,必须负责为内蕴状态提供存储空间。

  ●  享元工厂(FlyweightFactory)角色 :本角色负责创建和管理享元角色。本角色必须保证享元对象可以被系统适当地共享。当一个客户端对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个符合要求的享元对象。如果已经有了,享元工厂角色就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。

 

3、代码

 (1)抽象享元

public interface IFlyweight {

	public void operate(String state);
	
}

 

(2)具体享元
public class ConcreteFlyweight implements IFlyweight {
	
	private Character intrinsicState = null;
	
	public ConcreteFlyweight(Character intrinsicState) {
		super();
		this.intrinsicState = intrinsicState;
	}



	@Override
	public void operate(String state) {
		System.out.println("Intrinsic State = " + this.intrinsicState);
        System.out.println("Extrinsic State = " + state);
	}

}
 (3)享元工厂
/**
 * 享元类工厂
 * @author qiang
 *
 */
public class FlyweightFactory {
	
	private static Map<Character, IFlyweight> flyweightMap = new HashMap<Character, IFlyweight>();
	
	public static IFlyweight getFlyweight(Character state){
		IFlyweight f = flyweightMap.get(state);
		if(f != null){
			return f;
		}else{
			f = new ConcreteFlyweight(state);
			flyweightMap.put(state, f);
			return f;
		}
	}

}
 (4)客户端
public class Client {
	
	public static void main(String[] args) {
		IFlyweight flyweight1 = FlyweightFactory.getFlyweight(new Character('a'));
		flyweight1.operate("first call");
		
		IFlyweight flyweight2 = FlyweightFactory.getFlyweight(new Character('b'));
		flyweight2.operate("second call");
		
		IFlyweight flyweight3 = FlyweightFactory.getFlyweight(new Character('a'));
		flyweight3.operate("third call");
	}

}
 
4、总结
享元模式的有点在于可以极大减少内存中对象的数量,使得相同的或者相似的对象在内存中只保留一份。
享元模式的外部状态相对独立,而且不影响内存的状态,从而使得享元对象可以再不同的环境中使用。
  • 大小: 6.9 KB
分享到:
评论

相关推荐

    享元模式的分析以及实际应用.docx

    享元模式的分析以及实际应用 1.前言 4 1.1 课题的研究背景 4 1.2 课题主要研究目标 4 2.相关技术简介 4 2.1Java简介 4 3. 享元模式介绍 5 3.1举例分析 5 3.2基本介绍 5 ...6. 享元设计模式学习总结: 13

    设计模式-享元模式(讲解及其实现代码)

    设计模式-享元模式(讲解及其实现代码)

    C++设计模式课件13_Flyweight_享元模式.pdf

    C++设计模式课件13_Flyweight_享元模式.pdf

    .NET设计模式(13):享元模式(FlyweightPattern)

    本文试图通过一个简单的字符处理的例子,运用重构的手段,一步步带你走进Flyweight模式,在这个过程中我们一同思考、探索、权衡,通过比较而得出好的实现方式,而不是给你最终的一个完美解决方案。面向对象的思想很...

    设计模式课件大全

    设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者...

    C#设计模式_设计模式_C#_

    享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. ...

    设计模式_源代码大全.zip

    设计模式_源代码大全.zip 包括:1....享元模式 23.解释器模式 24.访问者模式 ... 相关资料:https://download.csdn.net/download/djk8888/11189309 和 https://download.csdn.net/download/djk8888/11189072

    java设计模式

    28.3.1 享元模式优点和缺点 28.3.2 享元模式的应用 28.4 享元模式的扩展 28.4.1 线程安全的问题 28.4.2 性能平衡 28.5 最佳实践 第29章 桥梁模式 29.1 我有一个梦想…… 29.2 桥梁模式的定义 29.3 桥梁模式的应用 ...

    Java23种设计模式

    1.2.6 享元模式 32 1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 37 1.3.2 命令模式 40 1.3.3 解释器模式 43 1.3.4 迭代器模式 45 1.3.5 中介者模式 49 1.3.6 备忘录模式 52 1.3.7 观察者模式 54 1.3.8 ...

    Java设计模式-图解-附代码

    1.2.6 享元模式 32 1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 37 1.3.2 命令模式 40 1.3.3 解释器模式 43 1.3.4 迭代器模式 45 1.3.5 中介者模式 49 1.3.6 备忘录模式 52 1.3.7 观察者模式 54 1.3.8 ...

    C#设计模式(23种设计模式)

    享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者模式(Observer Pattern...

    Java设计模式整理

    1.2.6 享元模式 21 1.2.7 代理模式 23 1.3 行为型模式 24 1.3.1 责任链模式 25 1.3.2 命令模式 27 1.3.3 解释器模式 28 1.3.4 迭代器模式 30 1.3.5 中介者模式 32 1.3.6 备忘录模式 34 1.3.7 观察者模式 36 1.3.8 ...

    深入浅出java设计模式(高清中文PDF)

    享元模式 11.代理模式 12.责任链模式 13.命令模式 14.解释器模式 15.迭代器模式 16.调停者模式 17.备忘录模式 18.观察者模式 19.策略模式 20.状态模式 21.模板模式 22.访问者模式 最后,还附带一个关于...

    《java的23种设计模式》

    1.2.6 享元模式 32 1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 37 1.3.2 命令模式 40 1.3.3 解释器模式 43 1.3.4 迭代器模式 45 1.3.5 中介者模式 49 1.3.6 备忘录模式 52 1.3.7 观察者模式 54 1.3.8 ...

    设计模式所有实验及实验报告及代码.zip

    23享元模式 24组合模式 25行为型模式概述 26模板方法模式 27策略模式 28命令模式 29责任链模式 30状态模式 31观察者模式 32中介者模式 33迭代器模式 34访问者模式 35备忘录模式 36解释器模式 37UMLet的使用与类图的...

    设计模式PPT.rar

    02第二讲工厂方法模式 03第三讲抽象工厂模式 04第四讲工厂模式在开发中的运用 05第五讲单例模式 06第六讲原型模式 07第七讲建造者模式 08第八讲装饰模式 09第九讲策略模式 10第十讲观察者模式 11第十一讲享元模式 ...

    JAVA的23种设计模式实例

    1.2.6 享元模式 32 1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 37 1.3.2 命令模式 40 1.3.3 解释器模式 43 1.3.4 迭代器模式 45 1.3.5 中介者模式 49 1.3.6 备忘录模式 52 1.3.7 观察者模式 54 1.3.8 ...

    Java设计模式

    1.2.6 享元模式 32 1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 37 1.3.2 命令模式 40 1.3.3 解释器模式 43 1.3.4 迭代器模式 45 1.3.5 中介者模式 49 1.3.6 备忘录模式 52 1.3.7 观察者模式 54 1.3.8 ...

Global site tag (gtag.js) - Google Analytics