享元模式(Flyweight)通过共享技术实现相同或相似对象的重用,可以减少创建对象的数量,以减少内存占用和提高性能。Java String的常量池,python logging,线程池,数据库连接池都用到了享元模式。享元模式与单例模式类似,都具有共享变量的特征。本文通过使用matlab语言对享元模式进行实现。
IFlyweight.m
- classdef IFlyweight < handle
- methods(Abstract)
- print(~);
- end
- end
Flyweight.m
- classdef Flyweight < IFlyweight
- properties
- color
- end
- methods
- function obj = Flyweight(color)
- obj.color = color;
- end
- function print(obj)
- disp("color:"+obj.color)
- end
- end
- end
FlyweightFactory.m
- classdef FlyweightFactory < handle
- methods(Static)
- function res = getFlyweightMap()
- persistent flyweightMap;
- if isempty(flyweightMap) || ~isvalid(flyweightMap)
- flyweightMap = containers.Map();
- end
- res = flyweightMap;
- end
- function obj = getFlyweight(color)
- flyweightMap = FlyweightFactory.getFlyweightMap();
- if(~flyweightMap.isKey(color))
- flyweightMap(color) = Flyweight(color);
- end
- obj = flyweightMap(color);
- end
- function size = getFlyweightMapSize()
- flyweightMap = FlyweightFactory.getFlyweightMap();
- size = flyweightMap.length();
- end
- end
- end
测试代码
- fw1 = FlyweightFactory.getFlyweight('Red');
- fw2 = FlyweightFactory.getFlyweight('Blue');
- fw3 = FlyweightFactory.getFlyweight('Red');
- fw1.print();
- fw2.print();
- fw3.print();
- disp(FlyweightFactory.getFlyweightMapSize());
- clear('FlyweightFactory');