设计模式课程 设计模式精讲 13-1 享元模式讲解

1    课程讲解

1.1  类型:

1.2  定义:

1.3  应用场景:

1.4  优点:

1.5  缺点:

1.6  扩展:

1.7  和其他设计模式比较:

1    课程讲解
1.1  类型:

结构型:

1.2  定义:

◆定义:提供了减少对象数量从而改善应用所需的对象结构的方式
◆运用共享技术有效地支持大量细粒度的对象

(可能对于内存溢出类型的问题解决有效)(池子)

1.3  应用场景:

◆ a  常常应用于系统底层的开发,以便解决系统的性能问题。

(系统中如果有大量的对象,可能会造成内存溢出,我们可以把共同的部分抽象出来,有相同的业务请求,则返回在内存中的已有对象,避免重新创建。)

◆   b  系统有大量相似对象、需要缓冲池的场景。

(某个对象的复用度越高,越倾向于使用享元模式)

1.4  优点:

◆减少对象的创建,降低内存中对象的数量,降低系统的内存,提高效率
◆减少内存之外的其他资源占用

(a  new对象需要时间,当我们直接从池子中取对象的时候,对象不用创建,节省了时间,特别是当对象并发或者使用率比较高的时候,提高了效率

b  文件句柄和窗口句柄是有一定的限制的,当同一对象被特别多的时候,往往可能导致句柄达到极限而导致崩溃)

1.5  缺点:

◆关注内/外部状态、关注线程安全问题

我们使用共享模式的时候,大都是使用hashMap,不会用HashTable(用hashTable会由于同步锁造成效率过低(特别是应用在报考系统3天内登录多少人,某一天微博大事件情况))


◆使系统、程序的逻辑复杂化

外部状态不应该随着内部状态的变化而变化

1.6  扩展:

内部状态:

在享元模式内部并且不会随着环境改变而改变的共享部分;无论外部环境如何变化,我都不变,并且该状态在享元模式内部。

外部状态:

随着环境改变而改变的就是外部状态,这种状态记录在享元模式的外部。

1.7  和其他设计模式比较:

享元模式和代理模式:

代理模式是代理一个类,如果生成这个代理类花的资源和时间比较多,可以使用享元模式处理这个类的速度。

享元模式和单例模式:

容器单例是两种方式的一种结合。享元模式是一种复用对象的思想

原文地址:https://www.cnblogs.com/1446358788-qq/p/11518765.html

时间: 2024-10-08 03:34:10

设计模式课程 设计模式精讲 13-1 享元模式讲解的相关文章

设计模式(十二): Flyweight享元模式 -- 结构型模式

说明: 相对于其它模式,Flyweight模式在PHP实现似乎没有太大的意义,因为PHP的生命周期就在一个请求,请求执行完了,php占用的资源都被释放.我们只是为了学习而简单做了介绍. 1. 概述 面向对象技术可以很好地解决系统一些灵活性或可扩展性或抽象性的问题,但在很多情况下需要在系统中增加类和对象的个数.当对象数量太多时,将导致运行代价过高,带来性能下降等问题.比如:例子1:图形应用中的图元等对象.字处理应用中的字符对象等. 2.解决方案: 享元模式(Flyweight):对象结构型模式运用

java/android 设计模式学习笔记(13)---享元模式

这篇我们来介绍一下享元模式(Flyweight Pattern),Flyweight 代表轻量级的意思,享元模式是对象池的一种实现.享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,缓存可共享的对象,来达到对象共享和避免创建过多对象的效果,这样一来就可以提升性能,避免内存移除和频繁 GC 等. 享元模式的一个经典使用案例是文本系统中图形显示所用的数据结构,一个文本系统能够显示的字符种类就是那么几十上百个,那么就定义这么些基础字符对象,存储每个字符的显示外形和其他的格式化数据

C#设计模式(13)——享元模式

出处:https://www.cnblogs.com/wyy1234/ 阅读目录 1.享元模式介绍 2.小结 回到顶部 1.享元模式介绍 在软件开发中我们经常遇到多次使用相似或者相同对象的情况,如果每次使用这个对象都去new一个新的实例会很浪费资源.这时候很多人会想到前边介绍过的一个设计模式:原型模式,原型模式通过拷贝现有对象来生成一个新的实例,使用拷贝来替代new.原型模式可以很好的解决创建多个相同/相似实例的问题,为什么还要用享元模式呢?这是因为这两种模式的使用场景是不同的,原型模式侧重于”

设计模式--13、享元模式

享元模式: 先让我们来看一个应用场景: 比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象.如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了.那么如果要是每个字母都共享一个对象,那么就大大节约了资源.也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象. 在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式.Flyw

设计模式C++实现二十二:享元模式

享元模式(flyweight):运用共享技术有效地支持大量细粒度的对象. 享元模式可以避免大量非常相似类的开销.在程序设计中,有时需要生成大量细粒度的类实例来表示数据.如果能发现这些实例除了几个参数外基本上都是相同的,有时就能够受大幅度地减少需要实例化的类的数量.如果能把那些参数移到类实例的外面,在方法调用时将它们传过来,就可以通过共享大幅度地减少单个实例的数目. 使用场景:如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的存储开销时就应该考虑应用,还有就是对象的大多数状态可以外部状

【13】享元模式(FlyWeight Pattern)

一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,若重复地使用new创建这个对象的话,就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重.享元模式可以解决这个问题,下面具体看看享元模式是如何去解决这个问题的. 二.享元模式的详细介绍 在前面说了,享元模式可以解决上面的问题了.在介绍享元模式之前,让我们先要分析下如果去解决上面那个问题.上面的问题就是重复创建了同一个对象,如果让我们去解决这个问题肯定会这样想:"既然都是同一个对象,能不能只创建一个对

【设计模式】享元模式(Flyweight)

摘要: 1.本文将详细介绍享元模式的原理和实际代码中特别是Android系统代码中的应用. 纲要: 1. 引入享元模式 2. 享元模式的概念及优缺点介绍 3. 享元模式在Android源码中的应用 1.先来一个段子: GG每天给MM至少发一条短信,而且每天入睡前是必有一条短信的,往往是一些琐事和一些比较肉麻的情话.开始的一个月,GG还对此是乐不可支,随着时间的推移,那些肉麻的话说了很多遍,自己也觉得厌烦了,而且更让人不可忍耐的是这些肉麻的情话每次都要重复的输入.GG把这一烦心事告诉了自己的好友K

设计模式课程 设计模式精讲 27-1 状态模式讲解

1 课程讲解 1.1 类型: 1.2 定义: 1.3 适用场景: 1.4 优点: 1.5 缺点: 1.6 状态模式相关的设计模式 1 课程讲解 1.1 类型: 行为型 1.2 定义: ◆允许一个对象在其内部状态改变时,改变它的行为 对象状态改变,其行为也需要改变或者不改变. 解决的问题是,当控制一个对象状态转换的过程比较复杂的时候,这样就可以把状态的判断逻辑转移到表示不同状态的一系列类当中. 例如课程播放有暂停,播放,快进不同的状态,把这些状态放入到不同的状态类当中. 1.3 适用场景: ◆一个

.NET设计模式(13):享元模式(Flyweight Pattern)(转)

摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价.那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作? 本文试图通过一个简单的字符处理的例子,运用重构的手段,一步步带你走进Flyweight模式,在这个过程中我们一同思考.探索.权衡,通过比较而得出好的实现方式,而不是给你最终的一个完美解决方案. 主要内容: 1.  Flyweight模式解说 2..NET中的Flyweight