享元模式.

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

软件编程基础 一、程序的编辑 Java 源程序是以 Java 为后缀的简单的文本文件,可以用各种 Java 集成开发环境中的源代码编辑器来编写,也可以用其他文 本编辑工具,如 Windows 中的记事本或 DOS 中的 EDIT 软件等。 利用文字编辑器编写下列程序 public class Hello.
首页 全国高等学校招生考试统一考试 监考员培训 广州市招生考试委员会办公室.
人口增长.
第16章 代理模式 Website:
普通高等学校 本科教学工作水平评估方案.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
第二章 复式记账原理*** 主要内容、重点难点: 1.会计要素与会计等式*** 2.会计科目与账户*** 3. 借贷记账法***
第一章 会计法律制度 补充要点.
第五章 会计职业道德.
二、个性教育.
1、分别用双手在本上写下自己的名字 2、双手交叉
四資二甲 第三週作業 物件導向程式設計.
2007年11月考试相关工作安排 各考试点、培训中心和广大应考人员:
分式的乘除(1) 周良中学 贾文荣.
第四章 制造业企业 主要经济业务核算.
淄博信息工程学校 ZIBOIT&ENGINEERING VOCATONAL SHCOOL 03 交换机干道技术 计算机网络技术专业.
《思想品德》七年级下册 教材、教法与评价的交流 金 利 2006年1月10日.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
Oracle数据库 Oracle 子程序.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
第10讲 Java面向对象编程基础(4) 教学目标 主要内容.
第9章 单例模式 Website:
第九章 字符串.
Design Pattern (2) 设计模式(2) Institute of Computer Software 2018/9/21
程式設計實作.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
OpenMP简介和开发教程 广州创龙电子科技有限公司
SVN的基本概念 柳峰
面向对象建模技术 软件工程系 林 琳.
程式設計實作.
职责链模式.
存储系统.
走进编程 程序的顺序结构(二).
辅导课程六.
Windows网络操作系统管理 ——Windows Server 2008 R2.
组合模式.
CPU结构和功能.
C/C++/Java 哪些值不是头等程序对象
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
简单工厂模式.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
第12章 组合模式 Deng Song
VisComposer 2019/4/17.
分裂对象模型 C++ otcl.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
抽象工厂模式.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
5.2.2平行线的判定.
Chapter 18 使用GRASP的对象设计示例.
第7章 建造者模式 Deng Song
辅导课程十五.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
Python 环境搭建 基于Anaconda和VSCode.
_01自己实现简单的消息处理框架模型 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
JAVA 程式設計與資料結構 第三章 物件的設計.
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
Presentation transcript:

享元模式

本章教学内容 享元模式 模式动机与定义 模式结构与分析 模式实例与解析 模式效果与应用 模式扩展

享元模式 模式动机 面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。 享元模式正是为解决这一类问题而诞生的。享元模式通过共享技术实现相同或相似对象的重用。

享元模式 模式动机

享元模式 模式动机 在享元模式中可以共享的相同内容称为内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State),由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同的对象可以具有一些不同的特征,而相同的内部状态是可以共享的。 在享元模式中通常会出现工厂模式,需要创建一个享元工厂来负责维护一个享元池(Flyweight Pool)用于存储具有相同内部状态的享元对象。

享元模式 模式动机 在享元模式中共享的是享元对象的内部状态,外部状态需要通过环境来设置。在实际使用中,能够共享的内部状态是有限的,因此享元对象一般都设计为较小的对象,它所包含的内部状态较少,这种对象也称为细粒度对象。享元模式的目的就是使用共享技术来实现大量细粒度对象的复用。

享元模式 模式定义 享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。

享元模式 模式定义 Flyweight Pattern: Use sharing to support large numbers of fine-grained objects efficiently. Frequency of use: low

享元模式 模式结构

享元模式 模式结构 享元模式包含如下角色: Flyweight: 抽象享元类 ConcreteFlyweight: 具体享元类 UnsharedConcreteFlyweight: 非共享具体享元类 FlyweightFactory: 享元工厂类

享元模式 模式分析 享元模式是一个考虑系统性能的设计模式,通过使用享元模式可以节约内存空间,提高系统的性能。

享元模式 模式分析 享元模式的核心在于享元工厂类,享元工厂类的作用在于提供一个用于存储享元对象的享元池,用户需要对象时,首先从享元池中获取,如果享元池中不存在,则创建一个新的享元对象返回给用户,并在享元池中保存该新增对象。

享元模式 模式分析 典型的享元工厂类代码: public class FlyweightFactory { private HashMap flyweights = new HashMap(); public Flyweight getFlyweight(String key) if(flyweights.containsKey(key)) return (Flyweight)flyweights.get(key); } else Flyweight fw = new ConcreteFlyweight(); flyweights.put(key,fw); return fw;

享元模式 模式分析 享元模式以共享的方式高效地支持大量的细粒度对象,享元对象能做到共享的关键是区分内部状态(Internal State)和外部状态(External State)。 (1) 内部状态是存储在享元对象内部并且不会随环境改变而改变的状态,因此内部状态可以共享。 (2) 外部状态是随环境改变而改变的、不可以共享的状态。享元对象的外部状态必须由客户端保存,并在享元对象被创建之后,在需要使用的时候再传入到享元对象内部。一个外部状态与另一个外部状态之间是相互独立的。

享元模式 模式分析 典型的享元类代码: public class Flyweight { //内部状态作为成员属性 private String intrinsicState; public Flyweight(String intrinsicState) this.intrinsicState = intrinsicState; } public void operation(String extrinsicState) ......

享元模式 享元模式实例与解析 实例一:共享网络设备(无外部状态) 很多网络设备都是支持共享的,如交换机、集线器等,多台终端计算机可以连接同一台网络设备,并通过该网络设备进行数据转发,如图所示,现用享元模式模拟共享网络设备的设计原理。

享元模式 享元模式实例与解析 实例一:共享网络设备(无外部状态)

享元模式 享元模式实例与解析 实例一:共享网络设备(无外部状态) 演示…… 参考代码 (Chapter 15 Flyweight\sample01) 演示……

享元模式 享元模式实例与解析 实例二:共享网络设备(有外部状态) 虽然网络设备可以共享,但是分配给每一个终端计算机的端口(Port)是不同的,因此多台计算机虽然可以共享同一个网络设备,但必须使用不同的端口。我们可以将端口从网络设备中抽取出来作为外部状态,需要时再进行设置。

享元模式 享元模式实例与解析 实例二:共享网络设备(有外部状态)

享元模式 享元模式实例与解析 实例二:共享网络设备(有外部状态) 演示…… 参考代码 (Chapter 15 Flyweight\sample02) 演示……

享元模式 模式优缺点 享元模式的优点 享元模式的优点在于它可以极大减少内存中对象的数量,使得相同对象或相似对象在内存中只保存一份。 享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享。

享元模式 模式优缺点 享元模式的缺点 享元模式使得系统更加复杂,需要分离出内部状态和外部状态,这使得程序的逻辑复杂化。 为了使对象可以共享,享元模式需要将享元对象的状态外部化,而读取外部状态使得运行时间变长。

享元模式 模式适用环境 在以下情况下可以使用享元模式: 一个系统有大量相同或者相似的对象,由于这类对象的大量使用,造成内存的大量耗费。 对象的大部分状态都可以外部化,可以将这些外部状态传入对象中。 使用享元模式需要维护一个存储享元对象的享元池,而这需要耗费资源,因此,应当在多次重复使用享元对象时才值得使用享元模式。

享元模式 模式应用 (1)享元模式在编辑器软件中大量使用,如在一个文档中多次出现相同的图片,则只需要创建一个图片对象,通过在应用程序中设置该图片出现的位置,可以实现该图片在不同地方多次重复显示。

享元模式 模式应用 (2) 在JDK类库中定义的String类使用了享元模式。 public class Demo { public static void main(String args[]) String str1 = "abcd"; String str2 = "abcd"; String str3 = "ab" + "cd"; String str4 = "ab"; str4 += "cd"; System.out.println(str1 == str2); System.out.println(str1 == str3); System.out.println(str1 == str4); }

享元模式 模式扩展 单纯享元模式和复合享元模式 单纯享元模式:在单纯享元模式中,所有的享元对象都是可以共享的,即所有抽象享元类的子类都可共享,不存在非共享具体享元类。

享元模式 模式扩展 单纯享元模式和复合享元模式 复合享元模式:将一些单纯享元使用组合模式加以组合,可以形成复合享元对象,这样的复合享元对象本身不能共享,但是它们可以分解成单纯享元对象,而后者则可以共享。

享元模式 模式扩展 享元模式与其他模式的联用 在享元模式的享元工厂类中通常提供一个静态的工厂方法用于返回享元对象,使用简单工厂模式来生成享元对象。 在一个系统中,通常只有唯一一个享元工厂,因此享元工厂类可以使用单例模式进行设计。 享元模式可以结合组合模式形成复合享元模式,统一对享元对象设置外部状态。

本章小结 享元模式运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用,它是一种对象结构型模式。 享元模式包含四个角色:抽象享元类声明一个接口,通过它可以接受并作用于外部状态;具体享元类实现了抽象享元接口,其实例称为享元对象;非共享具体享元是不能被共享的抽象享元类的子类;享元工厂类用于创建并管理享元对象,它针对抽象享元类编程,将各种类型的具体享元对象存储在一个享元池中。 享元模式以共享的方式高效地支持大量的细粒度对象,享元对象能做到共享的关键是区分内部状态和外部状态。其中内部状态是存储在享元对象内部并且不会随环境改变而改变的状态,因此内部状态可以共享;外部状态是随环境改变而改变的、不可以共享的状态。

本章小结 享元模式主要优点在于它可以极大减少内存中对象的数量,使得相同对象或相似对象在内存中只保存一份;其缺点是使得系统更加复杂,并且需要将享元对象的状态外部化,而读取外部状态使得运行时间变长。 享元模式适用情况包括:一个系统有大量相同或者相似的对象,由于这类对象的大量使用,造成内存的大量耗费;对象的大部分状态都可以外部化,可以将这些外部状态传入对象中;多次重复使用享元对象。

END Thanks!