享原模式笔记(Java)
来源:互联网 发布:红楼梦里的建筑知乎 编辑:程序博客网 时间:2024/05/29 12:15
享原模式:运用共享技术有效的支持大量细粒度的对象。是对象型的结构模式。
享原模式能做到共享的关键是区分内蕴状态和外蕴状态。一个内部状态时存储在享原对象内部的,并且不会谁环境改变而有所不同。因此,一个享原可以具有内部状态可以共享。一个外部状态是谁环境的改变而改变的,不可以共享状态。享原对象的外部状态必须由客户端保存。外部状态和内部状态时相互独立的。
享原模式的参与者:抽象享原类(Flyweight),具体享原类(ConcreteFlyweight),非共享具体享原类(UnsharedConcreteFlyweight),享原工厂类(FlyweightFactory),客户端(Client)
抽象享原类(Flyweight):是所有享原类的超类或接口,通过这个接口Flyweight可以接受并作用于外部状态。抽象享原的接口使得享元变得可能,但是并不强制子类实行共享。
具体享原类(ConcreteFlyweight):实现抽象享原接口,并为内部状态(如果有的话)增加储存空间。ConcreteFlyweight是Flyweight的子类中可以共享的。并且它所储存的状态必须是内部的。
非共享具体享原类(UnsharedConcreteFlyweight):UnsharedConcreteFlyweight是不可以共享的Flyweight子类。
享原工厂类(FlyweightFactory):本类负责管理和创建Flyweight及Flyweight的子类对象的。当一个客户请求一个享原对象时,享原工厂需要检查系统中是否已经拥有一个符合要求的享原对象,如果有了,系统就提供该享原对象,如果没有则创建一个新的享原对象。
客户端(Client):需要自行存储享原对象的外部状态。
Flyweight类:
public interface Flyweight{
public abstract void Operation(String state);
}
ConcreteFlyweight类:
public class ConcreteFlyweight implements Flyweight{
private Character inState=null;
//内部状态
public ConcreteFlyweight(Character inState){
this.inState=inState;
}
//外部状态用参数传进来
public void Operation(String outState){
//code
}
}
public class UnsharedConcreteFlyweight implements Flyweight{
public void Operation(String outState){
//不共享的Flyweight的操作方法
}
}
class FlyweightFactory{
private HashMap flies=new HashMap();
public FlyweightFactory(){
//构造函数
}
public Flyweight factory(Character state){
/*根据HashMap 中是否含有处于state状态的对象来创建或返回已经存在的Flyweight 对象*/
}
}
享原模式在以下情况下使用:
(1)一个应用程序使用大量的对象
(2)完全由于使用对象造成很大的内存开销
(3)对象的大多数外部状态多可以变为外部状态
(4)如果删除对象的外部状态,按照内蕴状态可以分成很多组,每一个组都可以仅用一个对象代替。那么可以使用相对较少的共享对象取代很多种组对象。
(5)系统不依赖于这些对象的身份。
- 享原模式笔记(Java)
- java原子类---笔记
- (原)装饰模式
- C#设计模式纵横谈 笔记+原教程(很好很详细)
- 断点续传 Java版(原)
- 原串翻转(Java)
- 原型模式笔记(java)
- 建造模式笔记(Java)
- 组合模式笔记(Java)
- 装饰模式笔记(Java)
- 代理模式笔记(Java)
- java设计模式(笔记)
- 鸭子-策略模式(Strategy)[原]
- (32)21.3.4 原子类---Java编程思想之并发笔记
- [原]Java设计模式透析之 —— 适配器(Adapter)
- java单例模式 原子类 线程安全
- 集合类的学习笔记(原)
- shell学习笔记(原书摘录)
- C++函数调用方式(_stdcall, _pascal, _cdecl...)总结
- 上完计机ACM培训后的一点心得
- 多校_BIT_Watch the Movie hdoj3496
- Asp.net(C#)与Javascript变量、函数互访问
- hdoj 1010 基本搜索
- 享原模式笔记(Java)
- 转Configure,Makefile.am, Makefile.in, Makefile文件之间关系
- ARM学习笔记(一)--处理器模式
- mknod
- [HTC Touch Diamond/dopod S900/O2 XDA Ignito] 钻石详细注册表修改
- e2label、tune2fs
- ARM协处理器指令详解
- [sql server] 从日志中还原的资料
- Java正则表达式详解