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

广东企业网站建设价格陕西省住房城乡建设厅网站管理中心

广东企业网站建设价格,陕西省住房城乡建设厅网站管理中心,西安人才网官网,网站开发哈尔滨网站开发公司电话结构型模式-享元模式 7.7享元模式7.7.1概念7.7.2场景7.7.3优势 / 劣势7.7.4享元模式可分为7.7.5享元模式7.7.6实战7.7.6.1题目描述7.7.6.2输入描述7.7.6.3输出描述7.7.6.4代码 8.1.7总结享元模式 7.7享元模式 7.7.1概念 ​ 享元模式是通过共享对象减少内存使用#xff0c;来… 结构型模式-享元模式 7.7享元模式7.7.1概念7.7.2场景7.7.3优势 / 劣势7.7.4享元模式可分为7.7.5享元模式7.7.6实战7.7.6.1题目描述7.7.6.2输入描述7.7.6.3输出描述7.7.6.4代码 8.1.7总结享元模式 7.7享元模式 7.7.1概念 ​ 享元模式是通过共享对象减少内存使用来提高程序性能。在此模式中分为内部状态和外部状态其中相似的对象被存储在享元对象内部并对于所有享元对象都是相同的且状态通常是不变的。只在需要时内部共享而不是每次创建新的对象。而外部状态是享元对象依赖的可能变化的部分。这部分状态不存储在享元对象内部而是在使用享元对象时传递给对象。 7.7.2场景 ​ 在棋类游戏中棋子可以看作是享元对象因为棋子与棋子之间有着相同的属性和方法例如在颜色、大小、移动规则上都有着相同的特质。因此在棋类游戏中可以使用享元模式来共享相同的棋子对象避免创建大量的棋子对象从而提高游戏性能。 7.7.3优势 / 劣势 减少内存消耗通过共享公共状态减少创建对象的数量提升性能通过共享对象来减少内存中对象的数量可以减少垃圾回收的频率 线程安全问题享元模式的对象可能会导致线程安全问题需要采取一定的措施适用场景有限享元模式存在大量相似对象的场景若不适用则会导致性能下降代码复杂度增加 7.7.4享元模式可分为 享元接口Flyweight所有具体享元类的共享接口通常包含对外部状态的操作具体享元类ConcreteFlyweight继承Flyweight类或实现享元接口包含内部状态享元工厂类FlyweightFactory创建并管理享元对象当用户请求时提供已创建的实例或者创建一个客户端Client维护外部状态在使用享元对象时将外部状态传递给享元对象 7.7.5享元模式 package com.technologystatck.designpattern.mode.flyweight;import java.util.HashMap; import java.util.Map;public class Flyweight {public static void main(String[] args) {//实例化享元工厂对象FlyweightFactory factory new FlyweightFactory();//获取或创建享元对象并传递外部状态Flyweights flyweightA factory.getFlyweight(A);flyweightA.operation(External State A);Flyweights flyweightB factory.getFlyweight(B);flyweightB.operation(External State B);Flyweights flyweightC factory.getFlyweight(A);flyweightC.operation(External State C);} } //创建享元接口 interface Flyweights {//操作外部状态void operation(String extrinsicState); }//实现具体享元类存储内部状态 class ConcreteFlyweight implements Flyweights{//内部状态private String intrinsicState;public ConcreteFlyweight(String intrinsicState) {this.intrinsicState intrinsicState;}Overridepublic void operation(String extrinsicState) {System.out.println(Intrinsic State: intrinsicState,External State: extrinsicState);} }//创建享元工厂类创建并管理Flyweight对象 //当用户请求一个Flyweight时享元工厂会提供一个已经创建的实例或创建一个 class FlyweightFactory{private MapString,Flyweights flyweightsnew HashMap();public Flyweights getFlyweight(String key){//若没有享元对象时就将传进来的key值创建一个if(!flyweights.containsKey(key)){flyweights.put(key,new ConcreteFlyweight(key));}return flyweights.get(key);}}7.7.6实战 7.7.6.1题目描述 ​ 在一个图形编辑器中用户可以绘制不同类型的图形包括圆形CIRCLE、矩形RECTANGLE、三角形TRIANGLE等。现在请你实现一个图形绘制程序要求能够共享相同类型的图形对象以减少内存占用。 7.7.6.2输入描述 输入包含多行每行表示一个绘制命令。每个命令包括两部分 图形类型Circle、Rectangle 或 Triangle 绘制的坐标位置两个整数分别表示 x 和 y 7.7.6.3输出描述 对于每个绘制命令输出相应图形被绘制的位置信息。如果图形是首次绘制输出 “drawn at”否则输出 “shared at”。 7.7.6.4代码 package com.technologystatck.designpattern.mode.flyweight;import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner scanner new Scanner(System.in);//创建工厂实例GraphicFactory graphicFactory new GraphicFactory();while(scanner.hasNext()){String command scanner.nextLine();//定义一个静态方法proessCommand(graphicFactory,command);}}public static void proessCommand(GraphicFactory graphicFactory,String command){//定义数组存放类型变量String[] parts command.split( );DrawType drawTypeDrawType.valueOf(parts[0]);int xInteger.parseInt(parts[1]);int yInteger.parseInt(parts[2]);//Graphic graphicgraphicFactory.getGraphic(drawType);graphic.draw(new ConcretePosition(x,y));((ConcreteGraphic) graphic).setFirstTime(false);} }//使用枚举创建图形类型 enum DrawType{CIRCLE,RECTANGLE,TRIANGLE; }//创建坐标类 class ConcretePosition{//内部状态private int x;private int y;public ConcretePosition() {}public ConcretePosition(int x, int y) {this.x x;this.y y;}public int getX() {return x;}public void setX(int x) {this.x x;}public int getY() {return y;}public void setY(int y) {this.y y;} }//创建图像享元接口 interface Graphic{//外部状态void draw(ConcretePosition concretePosition); }//创建具体图形实现类 class ConcreteGraphic implements Graphic{//内部状态private DrawType drawType;public ConcreteGraphic(DrawType drawType) {this.drawType drawType;}//检查是否是第一次绘制该图形private Boolean isFirstTimetrue;public Boolean getFirstTime() {return isFirstTime;}public void setFirstTime(Boolean firstTime) {isFirstTime firstTime;}//描绘图形方法Overridepublic void draw(ConcretePosition concretePosition) {System.out.println(drawType(isFirstTime ? drawn:shared) at (concretePosition.getX() , concretePosition.getY()));} }//创建享元图形工厂 class GraphicFactory{private MapDrawType,Graphic graphicEditorsnew HashMap();//检查是否已创建对象public Graphic getGraphic(DrawType drawType){//若时第一次创建就实例化一个新对象否则就返回已经创建的对象。if(!graphicEditors.containsKey(drawType)){graphicEditors.put(drawType,new ConcreteGraphic(drawType));}return graphicEditors.get(drawType);} }8.1.7总结 享元模式 优点通过减少创建对象的数量以此来减少内存消耗提高程序的性能总结分为外部状态和内部状态内部状态主要是大量相似的对象外部状态是变化较大的对象场景用于包含大量相似对象且对象的内部状态可以共享外部状态变化较大时
http://www.dnsts.com.cn/news/60102.html

相关文章:

  • 扁平化设计网站 源码wordpress 文章免审核
  • 网站开发需要团队网站帮忙备案
  • 网站的域名分为哪些crm客户管理系统简介
  • 网站建设的视频东莞品牌做网站
  • 四川网站建设报价wordpress mu 插件
  • 设计师一般放作品的网站wordpress微信群机器人
  • 网站制作横幅图片素材专业网站建设价格分析
  • 推荐几个免费的网站wordpress自动推送百度
  • 挂号网站建设网站推广方法有
  • 网站设计有哪些公司成都 网站备案 幕布拍摄点
  • 做网站合肥站长工具综合查询站长工具
  • 做毕业设计一个网站的数据来源外包和劳务派遣哪个更好
  • 优化网站排名的方法修改wordpress数据库配置文件
  • 杭州好的做网站公司装饰设计图片
  • 如何重新做公司网站互联网seo是什么意思
  • 免费个人网站建站能上传视频吗农场理财网站建设
  • 最大的高仿手表网站seo优化技术培训
  • 山东省工程建设管理信息网站编程 朋友 做网站
  • 网站美工设计公司电话上海人才网赶集网
  • 加强公司门户网站建设方案wordpress 源文件导入
  • 网站首页设计费用泰安建设银行网站
  • 水墨风格 网站wordpress数字超市
  • 自己做的网站怎么加搜索功能江苏省建设工程质量监督站网站
  • 东莞网络公司 网站建设南京玄武网站建设
  • 山东省建设厅的网站o2o网站设计公司
  • 公司网站域名如何申请西安做网站公司哪家好 应该怎么选择
  • 杭州网站推广15个国内互动网站设计欣赏
  • 微信订阅号做网站淄博网站推广
  • 创意专业网站建设2022年中国500强公司排名
  • 学做缝纫的网站网络媒体发稿