当前位置: 首页 > news >正文

个人网站开发软件南昌网优化seo公司

个人网站开发软件,南昌网优化seo公司,微信浏览为网站的缓存怎么清理,c2c电子商务的特点享元模式是一种结构型设计模式,主要通过共享技术有效地减少大量细粒度对象的复用,以减少内存占用和提高性能。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式。 Flyweight is a structural pattern, which effecti…

享元模式是一种结构型设计模式,主要通过共享技术有效地减少大量细粒度对象的复用,以减少内存占用和提高性能。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式。

Flyweight is a structural pattern, which effectively reduces the reuse of a large number of fine-grained objects through sharing technology to reduce memory consumption and improve performance. Since the flyweight pattern requires that objects that can be shared must be fine-grained objects, it is also called lightweight mode.  

结构设计

Flyweight: 抽象享元类,包含原始对象中部分能在多个对象中共享的状态。 同一享元对象可在许多不同情景中使用。 享元中存储的状态被称为 “内在状态”。 传递给享元方法的状态被称为 “外在状态”。
ConcreteFlyweight: 具体享元类,实现享元接口,并为内部状态(如果存在的话)增加存储空间。
UnsharedConcreteFlyweight: 非共享具体享元类,抽象享元类使共享成为可能,但并不强制共享。
FlyweightFactory: 享元工厂类, 享元工厂会对已有享元的缓存池进行管理。 有了工厂后, 客户端就无需直接创建享元, 它们只需调用工厂并向其传递目标享元的一些内在状态即可。 工厂会根据参数在之前已创建的享元中进行查找, 如果找到满足条件的享元就将其返回; 如果没有找到就根据参数新建享元。
享元模式类图表示如下:
请添加图片描述

伪代码实现

接下来将使用代码介绍下享元模式的实现。

// 1、抽象享元类,存储的状态被称为 "内在状态"。 传递给享元方法的状态被称为 "外在状态"
public abstract class Flyweight {private String intrinsic;protected String extrinsic;public Flyweight(String extrinsic) {this.extrinsic = extrinsic;}public abstract void operation(String extrinsic);
}
// 2、具体享元类,实现享元接口
public class ConcreteFlyweight extends Flyweight {public ConcreteFlyweight(String extrinsic) {super(extrinsic);}@Overridepublic void operation(String extrinsic) {System.out.println("do some thing in the concrete flyweight instance");}
}
// 3、非共享具体享元类,抽象享元类使共享成为可能,但并不强制共享  
public class UnsharedConcreteFlyweight extends Flyweight {public UnsharedConcreteFlyweight(String extrinsic) {super(extrinsic);}@Overridepublic void operation(String extrinsic) {System.out.println("do some thing in the unshared concrete flyweight instance");}
}
// 4、享元工厂类, 享元工厂会对已有享元的缓存池进行管理。 有了工厂后, 客户端就无需直接创建享元,
// 它们只需调用工厂并向其传递目标享元的一些状态即可  
public class FlyweightFactory {private static final Map<String, Flyweight> pool = new HashMap<>();public static Flyweight getFlyweight(String extrinsic) {Flyweight flyweight = pool.get(extrinsic);if (flyweight == null) {flyweight = new ConcreteFlyweight(extrinsic);pool.put(extrinsic, flyweight);System.out.println("put a fly weight instance to the pool");}return flyweight;}
}
// 5、客户端调用
public class FlyweightClient {public void test() {// 从享元工厂获取享元类Flyweight flyweight1 = FlyweightFactory.getFlyweight("one");// 执行享元方法flyweight1.operation("one");// 从享元工厂获取重复享元类(直接从缓存池获取)Flyweight flyweight2 = FlyweightFactory.getFlyweight("one");flyweight2.operation("one");// 获取非共享享元子类Flyweight unsharedConcreteFlyweight = new UnsharedConcreteFlyweight("two");unsharedConcreteFlyweight.operation("two");}
}

适用场景

在以下情况下可以考虑使用享元模式:
(1) 一个系统有大量相同或者相似的对象,由于这类对象的大量使用,造成内存的大量耗费。
应用该模式所获的收益大小取决于使用它的方式和情景。它在下列情况中最有效:
程序需要生成数量巨大的相似对象
这将耗尽目标设备的所有内存
对象中包含可抽取且能在多个对象间共享的重复状态
(2) 对象的大部分状态都可以外部化,可以将这些外部状态传入对象中。
使用享元模式需要维护一个存储享元对象的享元池,而这需要耗费资源,因此,应当在多次重复使用享元对象时才值得使用享元模式。

优缺点

享元模式有以下优点:
(1) 节省内存。享元模式的优点在于它可以极大减少内存中对象的数量,使得相同对象或相似对象在内存中只保存一份。如果程序中有很多相似对象,那么可以考虑使用该模式
(2) 享元模式的外部状态相对独立,而且不会影响其内部状态,从而使得享元对象可以在不同的环境中被共享
但是享元模式也存在以下缺点:
(1) 可能需要牺牲执行速度来换取内存,为了使对象可以共享,享元模式需要将享元对象的状态外部化,而读取外部状态使得运行时间变长。
(2) 代码会变得更加复杂。 需要分离出内部状态和外部状态,这使得程序的逻辑复杂化

参考

《设计模式 可复用面向对象软件的基础》 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 著, 李英军, 马晓星等译
https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/flyweight.html 享元模式
https://refactoringguru.cn/design-patterns/flyweight 享元模式
https://www.runoob.com/design-pattern/flyweight-pattern.html 享元模式
https://www.cnblogs.com/adamjwh/p/9070107.html 简说设计模式——享元模式
https://blog.csdn.net/ShuSheng0007/article/details/116424138 秒懂设计模式之享元模式

http://www.ho-use.cn/article/2661.html

相关文章:

  • angular做门户网站做网站哪个平台好
  • 用ps做的网站样图怎么切知乎关键词排名优化工具
  • 南京大型网站设计公司百度统计流量研究院
  • 徐州做网站企业搜索引擎优化方法总结
  • 网站建设整改情况唐山seo
  • 网站建设价格标准渠道设计网页
  • 公司网站修改怎么做互联网推广销售
  • 一家专门做特卖的网站是什么电商网站入口
  • 网站设计制作排名产品推广策划方案怎么做
  • 菏砖网站建设武汉seo招聘信息
  • 新能源 东莞网站建设关键词优化教程
  • pc端网站营销淘宝搜索关键词查询工具
  • 网站开发属于何种合同百度关键词怎么做排名
  • 宁波seo网络推广选哪家广州seo招聘网
  • vip影视网站怎么做的百度推广免费
  • 做ppt的软件模板下载网站有哪些广告文案经典范例200字
  • 学校网站建设培训软文编辑器
  • 网站建设常用结构类型怎样推广品牌
  • sublime做家乡网站湖南seo推广
  • 郑州做网站推广的公司比较好的搜索引擎
  • 秦皇岛网站建设价格seo服务加盟
  • 潮州有没有做网站的人广告推广app
  • 网站建设范本seo网站推广软件 快排
  • 自己做网站怎么选架构网络自动推广软件
  • 网站开发步骤seo优化网站优化排名
  • 黄山网站优化seo技术培训教程视频
  • 网站建设电销长沙网站seo收费
  • 太仓网站建设tcbaidu怎么搭建属于自己的网站
  • 化妆品商城网站建设策划方案网站seo诊断
  • 石家庄响应式模板建站西安百度竞价代运营