大话设计模式笔记 享元模式

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

 

package flyweight;//可以接受并作用于外部状态
public abstract class Flyweight {public abstract  void operation(int extrinsicState);}

 

package flyweight;//为内部状态增加存储空间
public class ConcreteFlyweight extends Flyweight{@Overridepublic void operation(int extrinsicState) {System.out.println("ConcreteFlyweight"+extrinsicState);}}

 

package flyweight;//不需要共享的子类
public class UnsharedConcreteFlyweight extends Flyweight {@Overridepublic void operation(int extrinsicState) {System.out.println("UnsharedConcreteFlyweight"+extrinsicState);}}

 

package flyweight;import java.util.HashMap;public class FlyweightFactory {private HashMap<String, Flyweight> flyweightMap=new HashMap<String, Flyweight>();public FlyweightFactory() {flyweightMap.put("X", new ConcreteFlyweight());flyweightMap.put("Y", new ConcreteFlyweight());flyweightMap.put("Z", new ConcreteFlyweight());}public Flyweight getFlyweightMap(String key) {return flyweightMap.get(key);}public static void main(String[] args) {int extrinsicState=22;FlyweightFactory flyweightFactory=new FlyweightFactory();Flyweight flyweight=flyweightFactory.getFlyweightMap("X");flyweight.operation(--extrinsicState);Flyweight flyweight2=flyweightFactory.getFlyweightMap("Y");flyweight.operation(--extrinsicState);Flyweight flyweight3=flyweightFactory.getFlyweightMap("Z");flyweight.operation(--extrinsicState);UnsharedConcreteFlyweight unsharedConcreteFlyweight=new UnsharedConcreteFlyweight();unsharedConcreteFlyweight.operation(--extrinsicState);}}

 

享元模式可以避免大量非常相似类的开销。在程序设计中,有时需要生成大量细粒度的类实例来表示数据。如果能发现这些实例除了几个参数外基本上都是相同的,有时就能够大幅度地减少需要实例化的类的数量,如果能把那些参数移到类实例的外面,在方法调用时将它们传递进来,就可以通过共享大幅度地减少单个实例的数目。

 

转载于:https://www.cnblogs.com/linkarl/p/4868193.html

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

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

相关文章

python12岁_12岁。Python操作Excel,12Python,excel

excel在Python中的应用存测试数据有的时候大批量的数据&#xff0c;存到txt文件里显然不是最佳的方式&#xff0c;我们可以存到excel文件里面&#xff0c;第一方便我们存储数据和做数据&#xff0c;一方面方便我们读取数据&#xff0c;比较明朗。测试的时候就从数据库中读取出来…

什么叫工作到位?很深刻!

1、汇报工作说结果不要告诉老板工作过程多艰辛&#xff0c;你多么不容易&#xff01;老板不傻&#xff0c;否则做不到今天。举重若轻的人老板最喜欢&#xff0c;一定要把结果给老板&#xff0c;结果思维是第一思维。2、请示工作说方案不要让老板做问答题&#xff0c;而是要让老…

react 给一个引用的组件添加新属性_高阶组件在React中的应用

高阶组件的定义接受React组件作为输入&#xff0c;输出一个新的React组件。概念源自于高阶函数&#xff0c;将函数作为参数&#xff0c;或者输出一个函数&#xff0c;如map&#xff0c;reduce&#xff0c;sort。 用haskell的函数签名来表示&#xff1a; hocFactory:: W: React.…

杂想 · 警醒

今天无意间看到CSDN上一位大牛师姐的博客&#xff0c;真的是好惊讶啊&#xff01;很多时候总是太过自以为是&#xff0c;以为自己做不到的事情别人也很难做到。恰恰相反&#xff0c;成功总是伴随那些谦逊、努力、认真的人的&#xff01;曾几何时&#xff0c;自己或许也是一个认…

好好的活,简简单单过!

生命&#xff0c;每个人只有一次&#xff0c;或长或短&#xff1b;生活&#xff0c;每个人都在继续&#xff0c;或悲或欢&#xff1b;人生&#xff0c;每个人都在旅途&#xff0c;或起或伏。人无完人&#xff0c;事无完美&#xff0c;有些小人&#xff0c;你不须计较&#xff0…

SQL Server 中创建数据库、更改主文件组示例

以下示例在 SQL Server 实例上创建了一个数据库。该数据库包括一个主数据文件、一个用户定义文件组和一个日志文件。主数据文件在主文件组中&#xff0c;而用户定义文件组包含两个次要数据文件。ALTER DATABASE 语句将用户定义文件组指定为默认文件组。然后通过指定用户定义文件…

lunixs 退出mysql_MySQL的基本操作

1、数据库登录格式&#xff1a;mysql -h主机地址 -u用户名 -p用户密码 -P端口 -D数据库 -e “SQL内容”[rootwulaoer ~]# mysql -uroot -p2、修改密码格式&#xff1a;mysqladmin -u用户名 -p旧密码 password 新密码[rootwulaoer ~]# mysqladmin -uroot password 123456注&…

交际中你所不知道的说话的12个技巧!

1.“有一说一”和“自以为是”不同&#xff0c;别把粗鲁当成真性情与 他人相处&#xff0c;要遵循一个基本原则&#xff1a;己所不欲&#xff0c;勿施于人。你可以真挚地描述自己的感受&#xff0c;前提是不要带有攻击性&#xff0c;至于对他人做出评价和判断&#xff0c;则需要…

宽客的人amp;amp;事件映射

看完《宽客》这本书&#xff0c;叙事介绍20世纪华尔街对冲基金、股票、投资者依赖股市从直觉交易数学家的早期演化、物理学家用数学模型开发过程中的交易&#xff0c;这些进入金融数学家、物理学家依靠大数据分析、稍纵即逝的交易机会来买入卖出&#xff1b;同一时候找出交易模…

社交中的黄金法则,你要细细体会品味

1&#xff0c;不要急着用你的嘴&#xff0c;来为你的眼睛辩护什么。因为天知道你的嘴说出什么来。2&#xff0c;假如有人朝你扔石头&#xff0c;就收起来。因为那会是你日后建高楼的基石。3&#xff0c;能忍则忍&#xff0c;忍不了就改变&#xff0c;改变不了就认了哇。4&#…

Jsp笔记(1)

1. jsp页面中出现中文乱码怎么解决&#xff1f; 1 <% page contentType"text/html; charsetGB2312"%> 2 <% page language"java" import"java.util.*" pageEncoding"UTF-8"%> 用上面这两行代码去替换自动生成的代码&#…

这些略带幽默句子,笑的同时多感悟一下吧(收好)

1、穷&#xff0c;并不可怕&#xff0c;我怕穷着穷着就习惯了。2、世界上唯一不用努力&#xff0c;就能得到的只有年龄。3、我是你转身就忘的路人甲&#xff0c;凭什么陪你蹉跎年华到天涯&#xff1f;4、世界上最快乐的事情就是吃&#xff0c;第二快乐的是待会再吃。5、琴棋书画…

java 异常机制_深入理解Java异常处理机制

一、引子try…catch…finally恐怕是大家再熟悉不过的语句了&#xff0c;而且感觉用起来也是很简单&#xff0c;逻辑上似乎也是很容易理解。不过&#xff0c;我亲自体验的“教训”告诉我&#xff0c;这个东西可不是想象中的那么简单、听话。不信&#xff1f;那你看看下面的代码&…

ThreadLocal http://blog.jobbole.com/20400/

d转载于:https://www.cnblogs.com/hansongjiang/p/4875332.html

做人:失信是最大的破产!

一个人最大的破产是信用的破产&#xff01;哪怕你一无所有&#xff0c;但只要信用还在&#xff0c;就还有翻身的本金。保护好信用&#xff0c;珍惜别人给你的每一次信任&#xff01;因为有时候我们只有一次机会&#xff01;朋友有时候就像钞票&#xff0c;有真也有假。我们需要…

c#和WIN32 调用

作者&#xff1a;刘铁猛日期&#xff1a;2005-12-20关键字&#xff1a;C# .NET Win32 API版权声明:本文章受知识产权法保护&#xff0c;如果阁下想转载,在转载的时候烦劳阁下连同在下的姓名一起转载,并向bladeytom.com发一个Mail,我很想知道我的文章都去哪里了.谢谢.小序Win32 …

【干货】微信公众号运营必备工具(完整版)

做微信公众号运营最基本的要素有两点&#xff1a;一是内容要强大&#xff08;内&#xff09;&#xff0c;二是排版要美观&#xff08;外&#xff09;。做好前者&#xff0c;你需要有充足的知识储备以及精彩独到的文笔作为支撑&#xff0c;而做好后者则相对简单许多&#xff0c;…

java定时线程池_java 定时器线程池(ScheduledThreadPoolExecutor)的实现

前言定时器线程池提供了定时执行任务的能力&#xff0c;即可以延迟执行&#xff0c;可以周期性执行。但定时器线程池也还是线程池&#xff0c;最底层实现还是ThreadPoolExecutor&#xff0c;可以参考我的另外一篇文章多线程–精通ThreadPoolExecutor。特点说明1.构造函数public…

iOS 关于关键字高亮

- (NSMutableAttributedString *)colorStr: (NSString *)originalStr // originalStr : 需要高亮传入的字符串 { NSMutableAttributedString *dataStr [[[NSMutableAttributedString alloc] initWithString:originalStr] autorelease]; for (int i 0; i < originalStr.l…