当前位置: 首页 > 编程日记 > 正文

[Design] Flyweight Pattern

  结构模式 

  结构模式描述如何将类或者类的对象结合在一起形成更大的结构。
  结构模式描述两种不同的东西:类与类的实例。结构模式可以分为:类的结构模式和对象的结构模式两种。
  类的结构模式:类的结构模式使用继承来把类、接口等组合在一起,以形成更大的结构。类的结构模式是静态的,比如类形式的适配器模式。
  对象的结构模式:对象的结构模式描述怎么样把不同类型的对象组合在一起,以实现新的功能的方法。对象的结构模式是动态的。比如代理人模式。

--------------------------------------------------------------------------------------


享元(Flyweight)模式

享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的细粒度对象。根据享元对象的内部表象,享元模式可以分成单纯享元模式和复合享元模式两种形 式。享元对象不一定非要是不变对象。一个享元对象之所以能够共享,是因为它只含有可以共享的状态,而没有不可以共享的状态,这是应用享元模式的前提。享元 工厂实际上提供了一个缓存机制,判断对象是否存在然后创建或直接返回对象。

优缺点

使用享元模式可以大幅度降低内存中对象的数量。但是为了可以享元,需要将一些状态外部化, 这使得程序逻辑变的复杂,而且读取外部状态使得运行时间稍微变长。


单纯享元模式结构

2009042316524173.gif


1.    抽象享元角色

所有具体享元角色的基类。

2.    具体享元角色

实现抽象享元角色所规定的接口。如果有内蕴状态的话,必须为内蕴状态提供存储空间。内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享。

3.    享元工厂角色

负责创建和管理享元角色。保证享元对象可以被适当的共享,检查系统中是否有复合要求的对象。如果要直接近回,否则创建并返回。

4.    客户端角色

本角色需要维护一个对所有享元对象的引用,自行存储所有享元对象的外蕴状态。

复合享元模式结构

2009042223133313.gif


1.    抽象享元角色

所有具体享元角色的基类。

2.    具体享元角色

实现抽象享元角色所规定的接口。如果有内蕴状态的话,必须为内蕴状态提供存储空间。内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享。又称单纯具体享元角色。

3.    复合享元角色

此角色所代表的对象是不可以共享的,但可分解成多个本身可以共享的单纯享元对象。又称不可共享的享元对象。

4.    享元工厂角色

负责创建和管理享元角色。保证享元对象可以被适当的共享,检查系统中是否有复合要求的对象。如果要直接近回,否则创建并返回。

5.    客户端角色

本角色需要自行存储所有享元对象的外蕴状态。


相关文章:

网友们票选的2018 Best Paper,你pick谁?

整理 | 琥珀出品 | AI科技大本营不久前,Reddit 机器学习论坛上一位网友发布了一个帖子:“What is the best ML paper you read in 2018 and why?(你认为 2018 年读过的最好的论文是哪篇?)”吸引了各路网友前来回答。营…

微信小游戏创业,究竟是红海还是死海?

“跳一跳”、“弹球王者”、“海盗来了”、“斗地主”等等微信小游戏,你是不是很眼熟呢?这些都是前段时间被刷了屏的小游戏,以“海盗来了”为例,据透露,其月流水已经突破了 1000 万,单日流水峰值也达到了 2…

OSPF中的frame-relay(3) 点到多点非广播

hostname R1!interface Loopback0 ip address 1.1.1.1 255.255.255.255interface Serial0 ip address 192.168.1.1 255.255.255.0 encapsulation frame-relay ip ospf network point-to-multipoint non-broadcast //将接口类型指定为点对多点非广播 frame-relay map ip 192.1…

一步一步SharePoint 2007之十六:注册并配置一个网站用户

在前面的文章中,我已经介绍了如何创建管理帐户。创建其它帐户的方法是一样的。大家可以把这个注册系统放到自己的网站中,就可以成为网站的一部分了。本文将只讲解如何在管理工具中将用户手动加入到网站用户组中,至于如何将注册完后的用户自动…

Facebook再曝数据丑闻删除应用数据仍会被泄漏

据外媒报道,道德黑客、漏洞赏金猎人Inti De Ceukelaire于昨日披露,名为“NameTests”的第三方测验应用令1.2亿Facebook用户面临数据泄露风险,这进一步时使Facebook的数据丑闻升温。道德黑客Inti De Ceukelaire发现,只要用户注册Na…

榨菜肉丝汤的做法

<!-- /* Font Definitions */ font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} font-face {font-famil…

“不设边界”的云知声:从多场景AI芯片到视觉AI,誓要2019营收近3倍

记者| 杨丽 出品| AI科技大本营 若非要总结 2018、展望 2019 的话&#xff0c;可以借用云知声创始人兼 CEO 黄伟的一句点评&#xff1a;“所有伟大的公司都诞生于真实的生产需求。” 2019 年 1 月 2 日&#xff0c;云知声在京召开战略发布会&#xff0c;正式公布其正在研发的…

微软公布Win10正式版功能对比表,哪个版本适合你?

微软今天公布了Win10各个版本功能特性对照表&#xff0c;详细列出了Windows10系统的大多数功能以及哪些版本具备这些功能。通过这张表格可为消费者购买或升级Win10提供参考。 微软公布的原版表格为英文版&#xff08;可点此下载&#xff09;&#xff0c;IT之家将其翻译为中文&a…

linux tpm 测试完整记录,亲测有效。

没有tpm芯片&#xff0c;采用模拟器的方式来测试。 实验环境&#xff1a;内核版本 3.10.0-327 软件包准备&#xff1a; 内网&#xff0c;没有仓库&#xff0c;自己网上下载&#xff1a; 1. cmake-3.9.6-Linux-x86_64.tar.gz 解压后就已经有bin文件&#xff0c;可以直接使用bin下…

互联网流量太贵!新零售成创业新风口

什么是新零售?无人便利店、每个创业者都有自己的电商平台?运用人工智能、大数据等技术手段&#xff0c;对商品生产、流通、销售进行再升级&#xff0c;进而提高线上服务与线下体验?其实&#xff0c;说白了就是效率更高的零售新模式。联网早期的流量福利开始变弱&#xff0c;…

拼多多黄峥给陆奇“兼职”,欲挖掘这类AI人才

整理 | 一一出品 | AI科技大本营在上任 Y Combinator 中国创始人兼 CEO 四个月后&#xff0c;陆奇今日宣布三位兼职合伙人加盟 YC 中国&#xff0c;同时宣布新一期创业训练营正式完成招生工作&#xff0c;即将开始为期三个月的冬季训练营培训工作。三位兼职合伙人分别是拼多多创…

Crystal Reports中的字段

字段&#xff0c;是Crystal Reports呈现数据的基本单元&#xff0c;也是报表的数据中心。 在Crystal Reports中&#xff0c;字段的类型有数据库字段&#xff0c;公式字段&#xff0c;参数字段&#xff0c;组名字段&#xff0c;运行总计字段&#xff0c;特殊字段&#xff0c;未绑…

深度学习的发展可能已达极限!

【编者按】回首 2018 年&#xff0c;身处技术圈的你是否曾反思过些什么——科技与非科技企业界限的日益模糊、技术的发展现状和前景、科技发展的正向助推到负面效应&#xff0c;乃至个人心态上的变化。人文、生态、社会……玩技术的人看到的从来不仅仅是技术本身而已&#xff0…

大学生创业难?现在已不是问题!

现在越来越多的大学生离开学校加入了自主创业的队伍&#xff0c;那么你一定要知道政府为扶持大学生创业&#xff0c;出台的那些鼓励政策&#xff01;如果你符合以下条件&#xff1a;1、公司法人是普通高等院校&#xff08;高自考的不行&#xff09;毕业前2年的在校生和毕业后5年…

Oracle:彻底结束会话 ,彻底解锁

oracle会话被锁是经常的。但有时alter system kill session sid,serial#;并不能彻底的杀死会话。只能通过杀死Linux上对应的进程才行。以前都是通过v$session里的logon_time&#xff0c;和ps -ef|grep oracle所列出的时间大约的定位进程。然后结束。本来想把这个写成日志。但有…

使用vim打造自己的python编辑器

基础配置 vim的配置是在用户主目录下的 ~/.vimrc 文件中完成的&#xff0c;如果没有的话&#xff0c;需要自己新建一下&#xff1a; cd ~ touch .vimrc首先做些简单的配置&#xff1a; set nocompatible "关闭与vi的兼容模式 set number "显示行号 set nowrap &qu…

两亿多用户,六大业务场景,知乎AI用户模型服务性能如何优化?

作者 | 王政英来源 | 知乎技术专栏用户模型简介知乎 AI 用户模型服务于知乎两亿多用户&#xff0c;主要为首页、推荐、广告、知识服务、想法、关注页等业务场景提供数据和服务&#xff0c;例如首页个性化 Feed 的召回和排序、相关回答等用到的用户长期兴趣特征&#xff0c;问题…

加班到凌晨三点,就能月薪五万了吗?

早起上班的地铁上&#xff0c;看到朋友圈有不少人刷视觉志推出的一篇《凌晨3点不回家&#xff1a;成年人的世界是你想不到的心酸》&#xff0c;出于好奇&#xff0c;就点击看了一些。文章用一堆煽情的图片和煽情的文字推导出一个结论&#xff1a;成年人的世界很不容易&#xff…

山西之行的感想

出差学习、外出培训&#xff08;既“训”别人&#xff0c;也被别人“训”&#xff0c;呵呵&#xff09;……充实啊。关于这次出差学习&#xff0c;很想说点什么的。不过说实话&#xff0c;他们的全员人口系统目前只是完成信息编辑、查询功能&#xff0c;进一步的汇总、数据挖掘…

GIS开发随笔(2)——关于建立GIS数据库的几个问题

真正的实战开始了&#xff0c;根据用户的需求首先就是编写了一大堆的这样那样的文档说明&#xff0c;并根据用户需求分析建立了数据库的库表及其内容。在建库的过程中我们使用的是微软的Sql Server2000数据库&#xff0c;在分析数据库前也在网上游荡了些时日&#xff0c;发现很…

刘铁岩谈机器学习:随波逐流的太多,我们需要反思

嘉宾 | 刘铁岩 整理 | 阿司匹林 来源 | AI科技大本营在线公开课 人工智能正受到越来越多的关注&#xff0c;而这波人工智能浪潮背后的最大推手就是“机器学习”。机器学习从业者在当下需要掌握哪些前沿技术&#xff1f;展望未来&#xff0c;又会有哪些技术趋势值得期待&#…

SQL2K数据库开发二之查看和修改Sample数据库

1.在SQL Server 企业管理器中&#xff0c;选择“数据库”节点&#xff0c;右击sample 数据库图标&#xff0c;在弹出的菜单中选择“属性”。 2."常规"页面显示了数据库的概要信息。 3.“文件组”页面显示了数据库中现有的文件组&#xff0c;此时数据库中只有一个主文…

谈点正经的:Papi酱能火,如果你现在学她却未必能火起来

集才华美貌于一身的女子Papi酱刷屏了。先是融资1200万&#xff0c;估值3亿。其次&#xff0c;又即将在四月和罗辑思维一起联手推出“中国第一场新媒体广告拍卖会”。 这些数据和事件串在一起&#xff0c;网红经济又被推至新的高点&#xff0c;内容在资本圈也越发繁荣。是的&…

全国各地DNS地址

全国各地电信DNS服务器地址北京&#xff1a;202.96.199.133 202.96.0.133 202.106.0.20 202.106.148.1 202.97.16.195上海&#xff1a;202.96.199.132 202.96.199.133 202.96.209.5 202.96.209.133天津&#xff1a;202.99.96.68 10.10.64.68广东&#xff1a;202.96.128.143 202…

iteye和微博

如果iteye能同步新浪微博&#xff0c;我以后就用iteye来写技术博客

BIND日志相关(二)

在Linux环境下&#xff0c;提供了广泛流行的BIND服务器&#xff0c;它是构建DNS服务器最常用的服务器软件。介绍BIND的安装的文章现在很多&#xff0c;现在我们就一起来谈一下维护的话题。我们如何才能够了解DNS服务器的运行情况下呢&#xff0c;它忙不忙、负载大不大?这一切&…

riot.js教程【四】Mixins、HTML内嵌表达式

前文回顾riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期&#xff1b;riot.js教程【二】组件撰写准则、预处理器、标签样式和装配方法&#xff1b;riot.js教程【一】简介&#xff1b; 共享Mixins 混合开发可以使你很好的复用代码&#xff0c;如…

思必驰发布AI芯片,透视智能语音企业的商业化历程

2019 年 1 月 4 日&#xff0c;言由芯生——2019 年思必驰 AI 芯片暨战略发布会在京举行。 现场&#xff0c;AI 芯片作为重头戏展示了其低功耗、高性能的核心优势&#xff0c;同时&#xff0c;思必驰多视角解读了 2018 年所取成果&#xff0c;并公布了 2019 年战略路线&#x…

【转载from冰河】来杭十周年

2001年9月12日&#xff0c;我高中毕业考入浙江大学&#xff0c;开始了杭州的生活&#xff1b;今天算是来杭十周年纪念日。中午我在杭州四眼井国际青年旅舍准备了一只烤全羊&#xff0c;邀请浙大毽球协会成员和包括 Mazha、andyfires 和萝卜等当年在校期间一起搞计算机的朋友们一…

CNI:容器网络接口

CNI&#xff1a;容器网络接口CNI简介不管是 docker 还是 kubernetes&#xff0c;在网络方面目前都没有一个完美的、终极的、普适性的解决方案&#xff0c;不同的用户和企业因为各种原因会使用不同的网络方案。目前存在网络方案 flannel、calico、openvswitch、weave、ipvlan等&…