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

中小型企业网站优化案例网站二级目录怎么做

中小型企业网站优化案例,网站二级目录怎么做,wordpress支持视频播放,秦皇岛企业网站建设享元模式(Flyweight)的核心思想是对象复用,通过共享技术减少内存占用,就像"共享单车"一样让多个调用者共享同一组细粒度对象。 什么是享元模式? 享元模式是一种结构型设计模式,它通过共享技术有…

享元模式(Flyweight)的核心思想是对象复用,通过共享技术减少内存占用,就像"共享单车"一样让多个调用者共享同一组细粒度对象。

什么是享元模式?

享元模式是一种结构型设计模式,它通过共享技术有效地支持大量细粒度对象的复用。其核心是将对象状态分为:

  • 内部状态(Intrinsic):不变的共享部分(如字符编码)
  • 外部状态(Extrinsic):变化的非共享部分(如字符位置)

应用场景

  1. 需要创建海量相似对象(如游戏粒子系统)
  2. 对象的大部分状态可以外部化
  3. 内存占用是系统瓶颈

代码示例:实现字体共享系统

假设我们需要渲染文档中的字符,相同字体的字符应该共享字体对象

// 1. 享元接口
interface Font {void render(char c, int x, int y);
}// 2. 具体享元类(内部状态:字体名称、大小)
class ConcreteFont implements Font {private final String fontName;private final int fontSize;public ConcreteFont(String fontName, int fontSize) {this.fontName = fontName;this.fontSize = fontSize;}@Overridepublic void render(char c, int x, int y) {System.out.printf("渲染字符 '%c' 在位置(%d,%d) 使用字体[%s-%dpt]\n", c, x, y, fontName, fontSize);}
}// 3. 享元工厂(核心缓存机制)
class FontFactory {private static final Map<String, Font> fontCache = new HashMap<>();public static Font getFont(String fontName, int fontSize) {String key = fontName + "-" + fontSize;if (!fontCache.containsKey(key)) {System.out.println("创建新字体: " + key);fontCache.put(key, new ConcreteFont(fontName, fontSize));}return fontCache.get(key);}
}// 4. 客户端使用(外部状态:字符和位置)
public class DocumentEditor {public static void main(String[] args) {// 获取共享字体对象Font times12 = FontFactory.getFont("Times New Roman", 12);Font arial14 = FontFactory.getFont("Arial", 14);Font times12_2 = FontFactory.getFont("Times New Roman", 12); // 复用已有对象// 渲染文本(外部状态每次传递)times12.render('H', 10, 20);arial14.render('e', 15, 20);times12_2.render('l', 20, 20); // 复用相同的字体对象}
}

执行结果

创建新字体: Times New Roman-12
创建新字体: Arial-14
渲染字符 'H' 在位置(10,20) 使用字体[Times New Roman-12pt]
渲染字符 'e' 在位置(15,20) 使用字体[Arial-14pt]
渲染字符 'l' 在位置(20,20) 使用字体[Times New Roman-12pt]

享元模式UML图解

创建/管理
获取字体
调用渲染
«interface»
Font
+render(char, int, int)
ConcreteFont
-fontName: String
-fontSize: int
+render(char, int, int)
FontFactory
-fontCache: Map
+getFont(String, int)
DocumentEditor
+main()

享元模式vs对象池

特性享元模式对象池
复用目标不可变对象可重用对象
状态管理分离内部/外部状态对象完全独立
使用场景海量相似小对象创建成本高的对象
典型示例字符/棋子渲染数据库连接池

实际应用场景

  1. 游戏开发:共享树木/建筑纹理

    Texture treeTexture = TextureFactory.getTexture("oak");
    treeTexture.render(x, y, scale);
    
  2. 文档处理:共享字符格式

    Font font = FontFactory.getFont("Arial", 12);
    document.addChar('A', font, position);
    
  3. 棋类游戏:共享棋子对象

    ChessPiece blackPawn = PieceFactory.getPiece("pawn", BLACK);
    board.placePiece(blackPawn, x, y);
    

最佳实践与注意事项

  1. 线程安全:享元工厂需要同步控制

    public static synchronized Font getFont(String key) {// 双重检查锁定if (!cache.containsKey(key)) {cache.put(key, new ConcreteFont(key));}return cache.get(key);
    }
    
  2. 内存监控:防止缓存无限增长

    // 使用弱引用防止内存泄漏
    Map<String, WeakReference<Font>> cache = new HashMap<>();
    
  3. 外部状态管理:确保不依赖内部状态

    // 错误示例:将位置存储在享元对象中
    class BadFont {private int x, y; // 外部状态不应内部化!
    }
    
  4. 复合享元:组合多个享元对象

    class FontStyle {private Font baseFont;private boolean bold;private boolean italic;
    }
    

性能对比测试

public class PerformanceTest {public static void main(String[] args) {int count = 100_000;// 测试无享元模式long start1 = System.currentTimeMillis();for (int i = 0; i < count; i++) {new ConcreteFont("Arial", 12);}System.out.println("直接创建耗时: " + (System.currentTimeMillis() - start1) + "ms");// 测试享元模式long start2 = System.currentTimeMillis();for (int i = 0; i < count; i++) {FontFactory.getFont("Arial", 12);}System.out.println("享元模式耗时: " + (System.currentTimeMillis() - start2) + "ms");}
}

测试结果(10万次对象获取):

直接创建耗时: 15ms
享元模式耗时: 3ms
内存占用减少:约99.9%

总结

享元模式本质:用时间换空间,通过增加查找开销减少内存占用

适用条件

  • 系统中存在大量相似对象
  • 细粒度对象具备较接近的外部状态
  • 需要分离内部/外部状态

设计启示

  1. 对象复用比创建新对象更高效
  2. 不变状态与可变状态分离是优化关键
  3. 工厂模式是管理共享对象的有效手段

在Java标准库中,Integer.valueOf()就是享元模式的经典实现:对于-128到127的整数,会从缓存池中返回共享对象。

通过合理使用享元模式,可以显著降低系统内存消耗,尤其在大规模对象场景下效果惊人。但要注意避免过度设计,只有当对象数量确实导致性能问题时才推荐使用。


文章转载自:

http://fkTQRxKS.zpstm.cn
http://yWtU7eT4.zpstm.cn
http://9lkAAWEx.zpstm.cn
http://x5ipbpFA.zpstm.cn
http://ebGUwYtb.zpstm.cn
http://ZdzN2Z1T.zpstm.cn
http://n5nRGl7Z.zpstm.cn
http://NCgFs57E.zpstm.cn
http://sCiyj4Zy.zpstm.cn
http://UpYvlIKr.zpstm.cn
http://cNxsVbfT.zpstm.cn
http://NM28t2hk.zpstm.cn
http://p8Tyi0P2.zpstm.cn
http://hcFk3vTk.zpstm.cn
http://q0m42MqX.zpstm.cn
http://BDdtAb03.zpstm.cn
http://8kNrP44U.zpstm.cn
http://K0eiBWhO.zpstm.cn
http://tHpJZUtH.zpstm.cn
http://3GKIQrol.zpstm.cn
http://TbJ0Aqnz.zpstm.cn
http://xQQ7KP6C.zpstm.cn
http://2e8VxF9M.zpstm.cn
http://hpuZfSRE.zpstm.cn
http://5CA5RGPr.zpstm.cn
http://2S37cC2k.zpstm.cn
http://HG7PvPhb.zpstm.cn
http://XoERSPc2.zpstm.cn
http://aOrHFf7m.zpstm.cn
http://DWRE8V72.zpstm.cn
http://www.dtcms.com/wzjs/642421.html

相关文章:

  • 企业搭建一个营销型网站多少钱自己建网站需要怎么做
  • 农业建设信息网站视频 播放网站怎么做
  • php给一个网站做后台用花生壳做网站
  • 可以建设彩票网站吗个人购物网站搭建
  • 物流网站建设模板下载wordpress前端登录插件
  • 织梦增加网站英文名称哪个网站做相册好
  • 建个网站 网页空间多少新华seo推广
  • vs2015 网站开发沈阳建设工程信息网站
  • 青岛百度网站建设微信crm系统哪家好
  • 建设企业网站的常见成本有哪些网站建设制作设计seo优化南宁
  • 毕业设计 建设网站有哪些专门做写字楼的网站
  • word里面网站超链接怎么做看男科哪家好
  • 品牌网站设计企业服务上海有名的网站建设公司
  • 模板建站配云服务器施工多久可以做网站
  • 北京网站建设公司内江县城做信息网站赚不赚钱
  • 公司网站建设介绍中文wordpress企业主题
  • 专业的网站公司到哪里找如何创建网站目录
  • 电子商务网站的主题及建设目标杭州软件公司排名
  • 设计企业网站哪家好做服装店网站的素材
  • 可以做音乐mv视频网站wordpress文章页图片模式
  • 公司建设网站价格淘宝客用wordpress好吗
  • 公司网站可以自己做么京津冀协同发展调研报告
  • 自己建设的网站有管理后台的登录台州网站快速优化排名
  • 专注做蔬菜的网站房子设计图片
  • 网站开发工程师职业定位厦门 微网站建设公司
  • wordpress外贸建站公司岚山网站建设公司
  • 莱芜网站建设方案公司工装装修公司排名
  • wordpress 停站看网站用什么软件
  • 毕业设计如何用dw做网站百度搜索 相关网站
  • 杭州四喜做网站建设么找国外人做网站