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

海淀网站设计公司寻找赣州网站建设

海淀网站设计公司,寻找赣州网站建设,wordpress 多域名 插件,wordpress返佣水不激不跃,人不激不奋 一,定义 使用共享对象可有效地支持大量的细粒度的对象 享元模式是对象池的一种实现,用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象…

水不激不跃,人不激不奋

一,定义

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

享元模式是对象池的一种实现,用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象共享,避免创建过多对象的效果,这样一来就可以提升性能,避免内存溢出等。

在享元模式中会建立一个对象容器,在经典的享元模式中该容器为一个Map,它的键是享元对象的内部状态,它的值就是享元对象本身。客户端程序通过这个内部状态从享元工厂中获取享元对象,如果有缓存,则使用缓存对象,否则创建一个享元对象并且存入容器中,这样一来就避免了创建过多对象的问题。

二,使用场景

1,系统中存在大量的相似对象

2,细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,就是说对象没有特定身份

3,需要缓冲池的场景

三,角色介绍

Flyweight:享元对象抽象基类或接口

ConcreteFlyweight:具体的享元对象

FlyweightFactory:享元工厂,负责管理享元对象池和创建享元对象

四,使用案例

假设在吃鸡游戏中,每局游戏都会有100个玩家参与游戏,所以每局游戏都会创建100个玩家角色,如果一个玩家进行了10局游戏,他的角色就会被创建10次。这样就会造成频繁的GC,从而影响性能。如果我们使用享元模式,将玩家的姓名作为key,玩家角色作为value存放在内存中,这样就不会频繁的去创建玩家角色,避免造成不必要的资源浪费。

首先,创建一个玩家角色接口作为享元对象抽象接口,该接口定义玩家自己选择皮肤玩游戏:

public interface Player {/*** 玩游戏* @param skin 自己选择的皮肤* */void playGame(String skin);
}

然后创建具体的享元对象 :

public class ConcretePlayer implements Player{private String name;public ConcretePlayer(String name) {this.name = name;}@Overridepublic void playGame(String skin) {System.out.println("玩家"+name+"使用"+skin+"角色玩游戏");}
}

最后创建享元工厂:

public class PlayerFactory {private static HashMap<String,Player> map =new HashMap<>();public static Player createPlayer(String name){if(map.get(name)==null){System.out.println("创建新的角色");ConcretePlayer concretePlayer =new ConcretePlayer(name);map.put(name,concretePlayer);return concretePlayer;}else {System.out.println("从缓存中拿取角色");ConcretePlayer player = (ConcretePlayer) map.get(name);return player;}}
}

使用:

Player player = PlayerFactory.createPlayer("N港之王");
player.playGame("红螳螂");
Player player1 = PlayerFactory.createPlayer("N港之王");
player1.playGame("黄螳螂");
Player player2 = PlayerFactory.createPlayer("N港之王");
player2.playGame("紫螳螂");

输出:

这样,即使玩家使用同一角色玩了好多把游戏,都只创建了一次角色,其余的都是从缓存中获取的

五,总结

享元模式实现比较简单,但是它的作用在某些场景确实及其重要。它可以大大减少应用程序创建的对象,降低程序内存的占用,增强程序的性能,但它同时也提高了系统的复杂性,需要分离出外部状态和内部状态,而且外部状态具有固化特性,不应该随内部状态改变而改变,否则导致系统的逻辑混乱。

享元模式的优点在于它大幅度地降低内存中对象的数量,但是,它做到这一点所付出的代价也是很高的。

享元模式使得系统更加复杂。为了使对象可以共享,需要将一些状态外部化,这使得程序的逻辑复杂化。

享元模式将享元对象的状态外部化,而读取外部状态使得运行时间稍微变长。

参考文献:Android源码设计模式解析与实战

http://www.yayakq.cn/news/673848/

相关文章:

  • 织梦搭建网站教程国内有实力的软件开发公司
  • 青岛低价网站建设广州建设网站的公司
  • 新款手机2023款排行榜杭州优化公司多少钱
  • 做app护肤网站变身小说网址wordpress
  • php网站开发教程网seo软件服务
  • wordpress主题网站模板广州市越秀区建设局官方网站
  • jsp网站开发中英文页面切换手机网页显示不全
  • 西安 网站建设 1阳光城最新消息
  • 做受视频播放网站网站开发的常见编程语言有哪些
  • 中国数据统计网站wordpress 分页标题
  • 建设能源官方网站电子商务网站建设考卷
  • 站长工具高清无吗网络规划设计师教程pdf
  • 企业能建站吗郑州专门做喷绘安装的网站
  • 建设机械网站公司简约网站模板html
  • 网站建设开发哪个好学应届生招聘去哪个网站
  • cms网站开发实验报告服务营销策划方案
  • 网站推广的优势天眼查河南建设网站公司
  • 那种导航网站福田专业做网站公司
  • 做钓鱼网站要具备什么做网站的的价格
  • 台州企业网站建设公司国外推广网站有什么
  • 五屏网站建设免费推荐大全app下载
  • 程序代码优化网站查大学专业网站
  • 网站发布工具长沙装修公司招聘网
  • 张家口网站建设公司百度输入法免费下载
  • wordpress 免费完整中文主题下载wordpress目录页seo
  • 如何选择网站建设常州 网站建设
  • 域名转移 网站访问爱设计作图
  • 盐田区住房和建设局网站莱芜网逃人员
  • 做高仿包的能做网站吗东昌府网站制作
  • 为什么要建手机网站个人网页介绍