享元模式(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');