Flyweight(享元)--对象结构型模式

Flyweight(享元)–对象结构型模式

一、意图
运行共享技术有效地支持大量细粒度的对象。

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

三、适用性
Flyweight模式的有效性很大程序上取决于如何使用它以及在何处处理它。
1.一个应用程序使用了大量的对象。
2.完全由于使用大量的对象,造成很大的存储开销。
3.对象的大多数状态都可变为外部状态。
4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。
5.应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。

四、结构
在这里插入图片描述

下面的对象图说明了如果共享flyweight。
在这里插入图片描述

五、效果
使用Flyweight模式时,传输、查找和/或计算外部状态都会产生运行时的开销,尤其当flyweight原先被存储为内部状态时。然而,空间上的节省抵消了这些开销。共享的flyweight越多,空间节省也就越大。

六、实现
1.删除外部状态。
2.管理共享对象。

七、要点总结
1.面向对象很好地解决了抽象的问题,但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题。
2.Flyweight采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象给系统带来的内存压力。在具体实现方面,要主要对象状态的处理。
3.对象的数量太大从而导致对象内存开销加大——什么样的数量才算大?这需要我们仔细的根据具体应用情况进行评估,而不能凭空臆断。

八、相关模式
Flyweight模式通常和Component模式结合起来,用共享叶结点的有向无环图实现一个逻辑上的层次结构。
通常,最好用Flyweight实现State和Strategy对象。

九、举例说明
享元模式像一个对象缓冲池。

本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IBM 声明对 Google 违背承诺未将 Istio 贡献给 CNCF 表示失望

Jason R McGee,IBM 院士,IBM 云平台副总裁兼 CTO。昨天晚上Google 宣布将 Istio 商标转让给 Open Usage Commons 组织,IBM 当即在 IBM Developer 网站上发表声明对 Google 的做法表示失望。以下为 IBM 云平台副总裁兼 CTO Jason R McGee 的声…

[mybatis]Configuration XML_properties

properties mybatis可以使用properties来引入外部properties配置文件的内容 resource:引入类路径下的资源 url:引入网络路径或者磁盘路径下的资源 process 项目结构: mybatis-config.xml: <?xml version"1.0" encoding"UTF-8" ?> <!DOCTY…

Proxy(代理)--对象结构型模式

Proxy&#xff08;代理&#xff09;–对象结构型模式 一、意图 为其他对象提供一种代理以控制对这个对象的访问。 二、动机 1.在面向对象系统中&#xff0c;有些对象由于某种原因&#xff08;比如对象创建的开销很大&#xff0c;或者某些操作需要安全控制&#xff0c;或者需要…

浅谈.Net Core DependencyInjection源码探究

前言对于IOC和DI&#xff0c;可能每个人都能说出自己的理解。IOC全称是Inversion of Control翻译成中文叫控制反转&#xff0c;简单的说就是把对象的控制权反转到IOC容器中&#xff0c;由IOC管理其生命周期。DI全称是DependencyInjection翻译成中文叫依赖注入&#xff0c;就是I…

[mybatis]Configuration XML_settings

settings settings包含很多重要的设置项 setting:用来设置每一个设置项name:设置项名value:设置项取值 mapUnderscoreToCamelCase 开启驼峰命名法 <settings><setting name"mapUnderscoreToCamelCase" value"true"/></settings>Emplo…

Chain of responsibility(职责链)--对象行为型模式

Chain of responsibility&#xff08;职责链&#xff09;–对象行为型模式 一、意图 使多个对象有机会处理请求&#xff0c;从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 二…

[mybatis]Configuration XML_typeAliases and Alias

There are many built-in type aliases for common Java types. They are all case insensitive, note the special handling of primitives due to the overloaded names. typeAliases typeAlias:为某个java类型起别名 type:指定要起别名的类型全类名;默认别名就是类名小写;em…

Command(命令)--对象行为型模式

Command&#xff08;命令&#xff09;–对象行为型模式 一、意图 将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 二、动机 1.在软件构建过程中&#xff0c;“行为请求…

实现业务数据的同步迁移 · 思路一

&#xff08;好雨知时节&#xff0c;大雨 _ _ _&#xff09;时不时的呢&#xff0c;会有小伙伴问我这样的问题&#xff1a;1、群主&#xff0c;你的.tsv文件是如何生成的&#xff1f;2、在线项目数据和种子数据的不一样&#xff0c;可以下么&#xff1f;3、如果我本地的数据开发…

Interpreter(解释器)--类行为型模式

Interpreter&#xff08;解释器&#xff09;–类行为型模式 一、意图 给定一个语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;这个解释器使用该表示来解释语言中的句子。 二、动机 1.在软件构建过程中&#xff0c;如果某一特定领域的问题比…

基于.NetCore3.1系列 —— 认证授权方案之授权揭秘 (下篇)

一、前言回顾&#xff1a;基于.NetCore3.1系列 —— 认证授权方案之授权揭秘 (上篇)在上一篇中&#xff0c;主要讲解了授权在配置方面的源码&#xff0c;从添加授权配置开始&#xff0c;我们引入了需要的授权配置选项&#xff0c;而不同的授权要求构建不同的策略方式&#xff0…

Iterator(迭代器)--对象行为模式

Iterator&#xff08;迭代器&#xff09;–对象行为模式 一、意图 提供一种方法顺序访问一个聚合对象的各个元素&#xff0c;而又不需暴露该对象的内部结构。 二、动机 1.在软件构建过程中&#xff0c;集合对象内部结构常常变化各异。但对于这些集合对象&#xff0c;我们希望…

Blazor带我重玩前端(三)

VS自带的Blazor模板介绍需要升级VS2019以及.NET Core到最新版&#xff08;具体的最低支持&#xff0c;我已经忘了&#xff0c;总是越新支持的就越好&#xff09;&#xff0c;以更好的支持自己开发Blazor项目。使用VS创建Blazor WebAssembly项目搜索Blazor模板选择Blazor WebAss…

[mybatis]Configuration XML_environments

enviroments transactionManager There are two TransactionManager types (i.e. type"[JDBC|MANAGED]") that are included with MyBatis: • JDBC – This configuration simply makes use of the JDBC commit and rollback facilities directly. It relies on the…

Mediator(中介者)--对象行为型模式

Mediator&#xff08;中介者&#xff09;–对象行为型模式 一、意图 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立地改变它们之间的交互。 二、动机 1.在软件构建过程中&#xff0c;经常…

[mybatis]Configuration XML_mappers

mappers 将sql映射注册到全局配置中 mapper 注册一个sql映射 resource:引用类路径下的sql映射文件url:引用网络路径或者磁盘路径下的sql映射文件class:引用(注册)接口 1.有sql映射文件&#xff0c;映射文件名必须和接口同名&#xff0c;并且放在与接口同一目录下&#xff1b;…

Memento(备忘录)--对象行为型模式

Memento&#xff08;备忘录&#xff09;–对象行为型模式 一、意图 在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保持这个状态。这样以后就可将该对象恢复到原先保存的状态。 二、动机 1.在软件构建过程中&#xff0c;某些对象的状态…

IBM、甲骨文、CNCF 就谷歌对 Istio 治理的处理提出抗议

近日来 Istio 商标转让、IBM 抗议谷歌违背承诺未将 Istio 捐献给 CNCF 的事情闹的沸沸扬扬。Google 宣布将 Istio 商标转让给 Open Usage Commons 组织IBM 声明对 Google 违背承诺未将 Istio 贡献给 CNCF 表示失望下面是据 TheRegister 的报道&#xff1a;谷歌创建了一个开放使…