经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
Matlab享元模式 - sw-lab
来源:cnblogs  作者:sw-lab  时间:2019/5/30 9:00:11  对本文有异议

享元模式(Flyweight)通过共享技术实现相同或相似对象的重用,可以减少创建对象的数量,以减少内存占用和提高性能。Java String的常量池,python logging,线程池,数据库连接池都用到了享元模式。享元模式与单例模式类似,都具有共享变量的特征。本文通过使用matlab语言对享元模式进行实现。

 IFlyweight.m

  1. classdef IFlyweight < handle
  2. methods(Abstract)
  3. print(~);
  4. end
  5. end

Flyweight.m

  1. classdef Flyweight < IFlyweight
  2. properties
  3. color
  4. end
  5. methods
  6. function obj = Flyweight(color)
  7. obj.color = color;
  8. end
  9. function print(obj)
  10. disp("color:"+obj.color)
  11. end
  12. end
  13. end

FlyweightFactory.m

  1. classdef FlyweightFactory < handle
  2. methods(Static)
  3. function res = getFlyweightMap()
  4. persistent flyweightMap;
  5. if isempty(flyweightMap) || ~isvalid(flyweightMap)
  6. flyweightMap = containers.Map();
  7. end
  8. res = flyweightMap;
  9. end
  10. function obj = getFlyweight(color)
  11. flyweightMap = FlyweightFactory.getFlyweightMap();
  12. if(~flyweightMap.isKey(color))
  13. flyweightMap(color) = Flyweight(color);
  14. end
  15. obj = flyweightMap(color);
  16. end
  17. function size = getFlyweightMapSize()
  18. flyweightMap = FlyweightFactory.getFlyweightMap();
  19. size = flyweightMap.length();
  20. end
  21. end
  22. end

测试代码

  1. fw1 = FlyweightFactory.getFlyweight('Red');
  2. fw2 = FlyweightFactory.getFlyweight('Blue');
  3. fw3 = FlyweightFactory.getFlyweight('Red');
  4. fw1.print();
  5. fw2.print();
  6. fw3.print();
  7. disp(FlyweightFactory.getFlyweightMapSize());
  8. clear('FlyweightFactory');

原文链接:http://www.cnblogs.com/usaddew/p/10947139.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号