导航:首页 > 网络设置 > 享元模式实例共享网络设备

享元模式实例共享网络设备

发布时间:2022-12-11 09:26:06

㈠ 享元模式的使用场景

如果一个应用程序使用了大量的对象,而这些对象造成了很大的存储开销的时候就可以考虑是否可以使用享元模式。
例如,如果发现某个对象的生成了大量细粒度的实例,并且这些实例除了几个参数外基本是相同的,如果把那些共享参数移到类外面,在方法调用时将他们传递进来,就可以通过共享大幅度单个实例的数目。

㈡ 23种设计模式--享元模式

运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似对象的开销,从而提高系统资源的利用率。
享元模式中存在以下两种状态:
1、内部状态,即不会随着环境的改变而改变的可共享部分。
2、外部状态,指随环境改变而改变的不可以共享的部分。享元模式的实现要领就是区分应用中的这两种状态,并将外部状态外部化。

抽象享元角色

具体享元角色

享元工厂角色

测试类

㈢ 请简述什么是享元模型,并举例说明它在ios开发中的一处运用

在面向对象软件设计中,利用公共对象不仅能节省资源还能提高性能。共享的对象只能提供某些内在的信息,而不能用来识别对象。专门用于设计可共享对象的一种设计模式叫做享元模式(Flyweight pattern)。

实现享元模式需要两个关键组件,通常是可共享的享元对象和保存他们的池。某种中央对象维护这个池,并从它返回适当的实例。
运用共享技术有效地支持大量细粒度的对象。

何时使用:
(1)应用程序使用很多对象;
(2)在内存中保存对象会影响内存性能;
(3)对象的多数特有状态(外在状态)可以放到外部而轻量化;
(3)移除了外在状态后,可以用较少的共享对象替代原来的那组对象;
(4)应用程序不依赖于对象标示,因为共享对象不能提供唯一的标示。

㈣ 23、Android设计模式---(对象共享、避免创建多对象)享元模式

又称 FlyWeight,代表轻量级的意思,结构型设计模式。
享元模式是对象池的一种实现。类似于线程池,线程池可以避免不停的创建和销毁多个对象,消耗性能。享元模式也是为了减少内存的使用,避免出现大量重复的创建销毁对象的场景。

享元模式用在一批相同或相似的对象上,这些对象有可以共享的内部状态和各自不同的外部状态。
享元模式中会有一个工厂,工厂维护着一个容器,容器以键值对的方式存储,键是对象的内部状态,也就是共享的部分,值就是对象本身。客户端从这个工厂获取对象,如果容器中存在这个对象就直接返回,不存在再创建新的对象并存入容器,避免了大量重复创建对象。

使用共享对象有效的支持大量的细粒度对象的复用。

系统中存在大量的 相似对象。
细粒度的对象都具备较接近的外部状态,且内部状态与环境无关,即对象没有特定身份。
需要 缓冲池 的场景。

例1. 过年回家买火车票,无数人在客户端上订票 (有多次购票、刷票的情况),即不断向服务端发送请求。
而每次查询,服务器必须做出回应,具体地,用户查询输入出发地和目的地,查询结构返回值只有一趟列车的车票。而数以万计的人有同样需求,即不间断请求数据,每次重新创建一个查询的车票结果,即造成大量重复对象创建、销毁,使得服务器压力加重。
享元模式正好适合解决该情形的问题,例如 A 到 B 地的车辆是有限的,车上铺位分硬卧、软卧和坐票三种,将这些可公用的对象缓存起来。用户查询时优先使用缓存,反之则重新创建。

我们知道 Java 中 String 是存在于常量池中,即一个 String 被定义之后它就被缓存到了常量池中,当其他地方使用同样的字符串,则直接使用缓存,而非创建。

享元模式的优缺点
优点 - 大幅度地降低内存中对象的数量。
缺点-1) 为了使对象可共享,需将一些状态外部化,使程序的逻辑复杂化

㈤ 什么是享元模式

    享元模式主要是为了解决大量对象创建后,增大了系统的资源开销,为了解决此问题,该模式通过共享对象的方式实现。

    接下来,以一个实际例子来简单介绍下享元模式,假设有这么一个场景有两个用户服务类,分别是普通用户服务与VIP用户服务,其中有个Operation操作,而该操作主要是为了完成用户注册过程,在注册过程中,需要通过调用短信接口来完成注册流程;这时两个用户服务都需要一个HTTP连接池来完成此功能;如果每个类都单独创建一个HTTP连接池,那么系统将会产生两份资源开销,而其利用率将会很低;

    为此,通过如下图例中的设计方式,将HTTP连接池的在用户服务工厂中进行创建,通过抽象工厂模式建立多种不同的用户服务子类实现,并将HTTP连接池在子类实例间进行共享,实现降低资源开销,提升连接池的资源利用率。

㈥ 享元模式的示例

典型的享元模式的例子为文书处理器中以图形结构来表示字符。一个做法是,每个字形有其字型外观, 字模 metrics, 和其它格式资讯,但这会使每个字符就耗用上千字节。取而代之的是,每个字符参照到一个共享字形物件,此物件会被其它有共同特质的字符所分享;只有每个字符(文件中或页面中)的位置才需要另外储存。以下程式用来解释上述的文件例子。这个例子用来解释享元模式利用只载立执行立即小任务所必需的资料,因而减少内存使用量。
public enum FontEffect {
BOLD, ITALIC, SUPERSCRIPT, SUBSCRIPT, STRIKETHROUGH
}
public final class FontData {
/**
* A weak hash map will drop unused references to FontData.
* Values have to be wrapped in WeakReferences,
* because value objects in weak hash map are held by strong references. *
/
private static final WeakHashMap<FontData, WeakReference<FontData>> FLY_WEIGHT_DATA = new WeakHashMap<FontData, WeakReference<FontData>>();
private final int pointSize;
private final String fontFace;
private final Color color;
private final Set<FontEffect> effects;
private FontData(int pointSize, String fontFace, Color color, EnumSet<FontEffect> effects){ this.pointSize = pointSize;
this.fontFace = fontFace;
this.color = color;
this.effects = Collections.unmodifiableSet(effects);
}
public static FontData create(int pointSize, String fontFace, Color color, FontEffect... effects) { EnumSet<FontEffect> effectsSet = EnumSet.noneOf(FontEffect.class);
for (FontEffect fontEffect : effects) {
effectsSet.add(fontEffect);
}
// We are unconcerned with object creation cost, we are recing overall memory consumption FontData data = new FontData(pointSize, fontFace, color, effectsSet);
// Retrieve previously created instance with the given values if it (still) exists WeakReference<FontData> ref = FLY_WEIGHT_DATA.get(data);
FontData result = (ref != null) ? ref.get() : null; // Store new font data instance if no matching instance exists
if (result == null) {
FLY_WEIGHT_DATA.put(data, new WeakReference<FontData> (data));
result = data;
}
// return the single immutable with the given values
return result;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof FontData) {
if (obj == this) {
return true;
}
FontData other = (FontData) obj;
return other.pointSize == pointSize && other.fontFace.equals(fontFace) && other.color.equals(color) && other.effects.equals(effects);
}
return false;
}
@Override
public int hashCode() {
return (pointSize * 37 + effects.hashCode() * 13) * fontFace.hashCode();
}
// Getters for the font data, but no setters. FontData is immutable.
}

㈦ 享元模式

面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太多时,将导致运行代价过高,带来性能下降等问题。

享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。

享元模式包含如下角色:

运行结果:

享元模式是一个考虑系统性能的设计模式,通过使用享元模式可以节约内存空间,提高系统的性能。

享元模式的核心在于享元工厂类,享元工厂类的作用在于提供一个用于存储享元对象的享元池,用户需要对象时,首先从享元池中获取,如果享元池中不存在,则创建一个新的享元对象返回给用户,并在享元池中保存该新增对象。

享元模式以共享的方式高效地支持大量的细粒度对象,享元对象能做到共享的关键是区分内部状态(Internal State)和外部状态(External State)。

享元模式的优点

享元模式的缺点

在以下情况下可以使用享元模式:

享元模式在编辑器软件中大量使用,如在一个文档中多次出现相同的图片,则只需要创建一个图片对象,通过在应用程序中设置该图片出现的位置,可以实现该图片在不同地方多次重复显示。

单纯享元模式和复合享元模式

享元模式与其他模式的联用

摘自: https://www.doudianyun.com/2020/06/%E7%BB%93%E6%9E%84%E5%9E%8Bc-5-%E4%BA%AB%E5%85%83%E6%A8%A1%E5%BC%8F/

阅读全文

与享元模式实例共享网络设备相关的资料

热点内容
网络共享中心没有网卡 浏览:517
电脑无法检测到网络代理 浏览:1369
笔记本电脑一天会用多少流量 浏览:560
苹果电脑整机转移新机 浏览:1372
突然无法连接工作网络 浏览:1043
联通网络怎么设置才好 浏览:1217
小区网络电脑怎么连接路由器 浏览:1018
p1108打印机网络共享 浏览:1205
怎么调节台式电脑护眼 浏览:680
深圳天虹苹果电脑 浏览:919
网络总是异常断开 浏览:608
中级配置台式电脑 浏览:976
中国网络安全的战士 浏览:626
同志网站在哪里 浏览:1408
版观看完整完结免费手机在线 浏览:1452
怎样切换默认数据网络设置 浏览:1103
肯德基无线网无法访问网络 浏览:1278
光纤猫怎么连接不上网络 浏览:1460
神武3手游网络连接 浏览:959
局网打印机网络共享 浏览:994