享元模式:运用共享技术有效地支持大量细粒度的对象。

适用场合:假设一个应用程序适用了大量的对象。而大量的这些对象造成了非常大的存储开销时就应该考虑使用。

首先定义一个IFlyweight接口

public interface IFlyweight {

    public void operation(int extrinsicstate);
}

接着定义一个ConcreteFlyweight继承IFlyweight

public class ConcreteFlyweight implements IFlyweight{

    @Override
public void operation(int extrinsicstate) { System.out.println("详细flyweight:"+extrinsicstate); } }

再定义一个UnsharedConcreteFlyweight继承IFlyweight

public class UnsharedConcreteFlyweight implements IFlyweight{

    @Override
public void operation(int extrinsicstate) { System.out.println("不共享的详细flyweight:"+extrinsicstate); }
}

然后定义一个FlyweightFactory

public class FlyweightFactory {

    Map<String, IFlyweight> flyweights=new HashMap<String,IFlyweight>();

    public FlyweightFactory(){
flyweights.put("x", new ConcreteFlyweight());
flyweights.put("y", new ConcreteFlyweight());
flyweights.put("z", new ConcreteFlyweight());
} public IFlyweight getFlyweight(String key){
return flyweights.get(key);
}
}

client代码

public static void main(String[] args) {
//享元模式
int extrinsicstate=22;
FlyweightFactory factory=new FlyweightFactory(); IFlyweight fx=factory.getFlyweight("x");
fx.operation(--extrinsicstate); IFlyweight fy=factory.getFlyweight("y");
fy.operation(--extrinsicstate); IFlyweight fz=factory.getFlyweight("z");
fz.operation(--extrinsicstate); IFlyweight uf=new UnsharedConcreteFlyweight();
uf.operation(--extrinsicstate);
}

设计模式之Flyweight模式(笔记)的更多相关文章

  1. 设计模式之——flyweight模式

    flyweight模式,又叫做享元模式. 顾名思义,享元模式就是共享一个元素. 百度百科 解释为: 享元模式(英语:Flyweight Pattern)是一种软件设计模式.它使用共享物件,用来尽可能减 ...

  2. 设计模式之Composite模式(笔记)

    组合模式:将对象组合成树形结构以表示"部分-总体"的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性. 适用场合:当需求中是体现部分与总体层次的结构时,以及希望用户 ...

  3. [学习笔记]设计模式之Flyweight

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 Flyweight(享元)模式运用共享技术,可以有效地支持大量细粒度的对象.今天我们会去参观小霍比特人们的酿酒工坊……等等,不是享元模 ...

  4. Java设计模式-享元模式(Flyweight)

    享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. FlyWeightFactory负责创建和管理享元单元,当一个客户端请求时,工厂需要检查 ...

  5. 面向对象设计模式之Flyweight享元模式(结构型)

    动机:采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行代价——主要指内存需求方面的代价.如何在避免大量细粒度对象问题的同 时,让外部客户程序仍然能够透明地使用面向对象的 ...

  6. 设计模式---对象性能模式之享元模式(Flyweight)

    一:概念 通过与其他类似对象共享数据来减少内存占用 如果一个应用程序使用了太多的对象, 就会造成很大的存储开销. 特别是对于大量轻量级 (细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为每个字 ...

  7. Flyweight模式_Java中23种设计模式

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 享元模式: Flyweight模式的有效性很大程度上取决于如何使用它以及在何处使用 ...

  8. Java设计模式(5)共享模式/享元模式(Flyweight模式)

    Flyweight定义:避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). 为什么使用共享模式/享元模式 面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可 ...

  9. 设计模式之flyweight享元模式

    运用共享技术支持大量细粒度对象的使用 Flyweight模式(享元) Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模 ...

随机推荐

  1. Matlab--从入门到精通(Chapter3 矩阵运算)

          数值计算可以分为两类:矩阵运算和矩阵元素运算 3.1 矩阵函数和特殊矩阵        矩阵代数的处理数组大部分以一维数组(向量)和二维数组(矩阵)为主. 常见的矩阵处理函数如下: 特殊矩 ...

  2. Quartz任务调度 服务日志+log4net打印日志+制作windows服务

    引言 现在许多的项目都需要定时的服务进行支撑,而我们经常用到的定时服务就是Quartz任务调度了.不过我们在使用定时Job进行获取的时候,有时候我们就需要记录一下自定义的日志,甚至我们还会对执行定时J ...

  3. rdesktop 脚本

    [root@Eren liwm]# cat rdesktop.sh #!/bin/bash -rdesktop -u user  192.168.122.10 -r sound:local -g 10 ...

  4. Ubuntu 16.04 Chrome浏览器安装flash player插件

    1:官网下载插件  flash palyer lash_player_npapi_linux_debug.x86_64.tar.gz 2:解压 提取 libpepflashplayer.so 3:手动 ...

  5. python基础8(装饰器)

    1.装饰器本质 装饰器的本质:一个闭包函数 装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展 2.装饰器函数 假设要写一个输出函数执行时间的装饰器 def timer(func): ...

  6. 【BZOJ 1212】[HNOI2004]L语言

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 因为查询的字典里面.单词的最大长度为10 所以. 如果建立一棵字典树的话. 深度最多为10: 那么可以写一个DP; 设f[i]表示1 ...

  7. CentOS6.3从光盘安装gcc(更改yum源)[转]

    转自:http://www.linuxidc.com/Linux/2012-11/73826.htm 一.加载光盘镜像 加载本地bin-DVD镜像文件到虚拟机系统,如图所示: 二.更改yum源 1.挂 ...

  8. iOS9适配小结

    前言 最新公布的app版本号适配了iOS9.总结一下适配过程的几个要点. Bitcode iOS9此番推出了新的特性:Bitcode,关于Bitcode的资料大家能够在网上找.Bitcode要求pro ...

  9. Android体验高扩展艺术般的适配器

    前言 本篇文章带大家体验一下一种具有扩展性的适配器写法. 这个适配器主要用于Item有多种的情况下.当然仅仅有一种类型也是适用的 实现 毫无疑问我们要继承BaseAdapter,重写getCount, ...

  10. MFC,C++,VC++,VS2010 之间究竟是什么关系

    C++是在C语言的基础上发展而来的面向对象的一种语言: MFC是基于C++类的窗口开发工具,内含大量的基类.降低编程人员的工作量: VC++是一种开发工具. VS2010是更高版本号的开发工具,功能强 ...