- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java 设计模式
享元模式
享元模式的结构 享元模式采用一个共享来避免大量拥有相同内容对象
的开销。这种开销最常见、最直观的就是内存的损耗。享元 对象能做到共享的关键是区分内蕴状态 (Internal State) 和 外蕴状态 (External State) 。
个内蕴状态是存储在享元对象内部的,并且是不会随
环境的改变而有所不同。因此,一个享元可以具有内蕴状态 并可以共享。
个外蕴状态是随环境的改变而改变的、不可以共享
的。享元对象的外蕴状态必须由客户端保存,并在享元对象 被创建之后,在需要使用的时候再传入到享元对象内部。外 蕴状态不可以影响享元对象的内蕴状态,它们是相互独立 的。
享元模式的优点:减少对象数量,节省内存空间。
享元模式的缺点:维护共享对象,需要额外的开销
用一个线程来维护垃圾回收)
享元模式的本质:分离与共享
何时使用享元模式:如果一个应用程序使
何时使用享元模式:
如果一个应用程序使
用了大量的细粒度对象,可以使用享元模式来减少对象数 量。
如果使用大量的对象,造成很大的存储开销,可以
使用享元模式来减少对象数量,并节约内存。
如果对象的大多数状态都可以转变为外部状态,可
以使用享元对象来实现外部状态与内部状态的分离。
元模式可以分成单纯享元模式和复合享元模式两种形式。
单纯享元模式
在单纯的享元模式中,所有的享元对象都是可以共享
的。
单纯享元模式所涉及到的角色如下:
抽象享元 (Flyweight) 角色 :给出一个抽象接口, 以规定
出所有具体享元角色需要实现的方法。具体享元
出所有具体享元角色需要实现的方法。
具体享元
(ConcreteFlyweight) 角色:实现抽象享元角色所规定出的接 口。如果有内蕴状态的话,必须负责为内蕴状态提供存储空 间。 享元工厂 (FlyweightFactory) 角色 :本角色负责创建 和管理享元角色。本角色必须保证享元对象可以被系统适当 地共享。当一个客户端对象调用一个享元对象的 时候,享元工厂角色会检查系统中是否 已经有一个符合要 求的享元对象。如果已经有了,享元工厂角色就应当提供这 个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创 建一个合适的享元对象。
好了,废话不多说,直接上代码,首先抽象一个场
景:
公司的管理层和普通员工对员工的信息有不同的
权限。管理层可以修改员工的个人信息,普员工只能查看不 能修改,擅自修改系统会给出提示。员工的个人信息是可以 共享的,但是起职能范围和操作权限可以被管理层修改。
/**抽象享元角色:
/**
[java]public interface IFlyWeight {
断传入的安全实体和权限,是否和享元对象内部状态匹配
* @param* 参数 securityEntity 和 permit
* @param
securityEntity* @param permit*
securityEntity
* @param permit
* @return
*/
public boolean match(String securityEntity, String permit); }
具体享元角色:
[java]public class AuthorizationFlyweight implements
IFlyWeight {/*** 内蕴对象, 安全实体*/private String mSecurityEntity;/*** 内蕴对象,权限
IFlyWeight {
/**
* 内蕴对象, 安全实体
*/
private String mSecurityEntity;
/**
* 内蕴对象,
权限
*/
private String mPermit;
public
AuthorizationFlyweight(String state) {String str[] =
AuthorizationFlyweight(String state) {
String str[] =
state.split(,);
this.mSecurityEntity = str[0];
this.mPermit = str[1];@Overridepublic boolean match(String securityEntity, String permit)if (mSecurityEntity.equals(securityEntity)amp;amp; mPermit.equals(permit)) {returntrue;return false;元工厂:[java]public class FlyWeightFactory {private staticFlyWeightFactor
您可能关注的文档
- HP3070操作教学讲解.docx
- HRW12-12-200型户外交流高压跌落式熔断器分析0001.docx
- hr面试技巧及注意事项-精选资料.docx
- html中去掉textarea右侧滚动条和右下角拖拽.docx
- HTML表格的美化修饰.docx
- hugo-最好用的静态网站生成器.docx
- H市电动汽车充电站项目建设需求规模与技术分析.docx
- i8发票税务操作手册-项目部.docx
- IBM整合服务管理在行业开花.docx
- ICAO考试通话:Test5A(含答案).docx
- Java面试之——代码与编程题分析.docx
- JCT674-1997聚氯乙烯弹性防水涂料.docx
- JMC二级-柴油发动机检测与维修(选做)-训练手册-有答案(0605).docx
- JZ201文化博览艺术中心CAD+标书-蚌埠博物档案规划馆方案弱电设计说明.docx
- KEF亚洲制造中心一瞥.docx
- kj浙江框筒高层办公楼建筑节能专项施工方案(屋面保温-外墙保温).docx
- KY13015.D-HV-11-SPC-01.0暖通设计施工说明.docx
- K:概率(文科2014年)Word版含答案.docx
- La-VaR模型在股票市场流动性风险度量中的应用.docx
- layer官方演示与讲解(jQuery弹出层插件).docx
文档评论(0)