Matlab享元模式
享元模式(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');
Matlab享元模式的更多相关文章
- Flyweight(享元模式)
import java.util.Hashtable; /** * 享元模式 * @author TMAC-J * 享元模式一般和工厂模式一起使用,但此处为了更好说明,只用享元模式 * 定义:享元模式 ...
- 设计模式(十二)享元模式(Flyweight Pattern)
一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非 ...
- 设计模式--享元模式Flyweight(结构型)
一.享元模式 在一个系统中如果有多个相同的对象,这些对象有部分状态是可以共享的,我们运用共享技术就能有效地支持大量细粒度的对象. 二.例子 举个围棋的例子,围棋的棋盘共有361格,即可放361个棋子. ...
- java享元模式(flyweight)
有个问题: Integer i1 = 12; Integer i2 = 12; System.out.println(i1 == i2);//输出true Integer i1 = 130; Inte ...
- 享元模式 - Flyweight
Flyweight(享元模式) 定义 GOF:运用共享技术有效地支持大量细粒度的对象. GOF的定义比较专业化,通俗来说,当你有大量相似的实例时,你把其中相同的实例取出来共享. 例子 在你的游戏场景中 ...
- C#设计模式-享元模式
在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然 ...
- C#设计模式系列:享元模式(Flyweight)
当频繁地从数据源读取数据时,读出的内容存在重复,那么需要使用享元模式(Flyweight)来提高内存效率,Flyweight模式将节省更多空间,共享的Flyweight越多,空间节省越大. 1.享元模 ...
- javascript - 享元模式
享元模式笔记 运用共享技术有效的支持大量的细粒度对象,避免对象间拥有相同内容造成多余的开销 享元模式主要还是对其数据.方法共享分离,它将数据和方法分成内部数据.内部方法和外部数据.外部方法. 内 ...
- 设计模式C#实现(十三)——享元模式(蝇量模式)
意图 0 适用性 1 结构 2 实现 3 效果 4 参考 5 意图 运用共享技术有效地支持大量细粒度的对象. 适用性 当以下情况都成立时使用: 一个程序使用了大量的对象 完全由于使用大量对象造成很大存 ...
随机推荐
- IE a zoom:1
- opencart按重量配送如何设置
OpenCart中基于重量的配送模块让你使用自己的价格折算表来决定配送价格.可以基于不同的重量允许设置价格范围,重量和价格的格式如下:weight(重量1):cost(价格1), weight(重量2 ...
- 什么是amp?amp有什么用处?
AMP是移动页面加速器Accelerated Mobile Pages的简称,是Google带领开发的开源项目,目的是为提升移动设备对网站的访问速度.它的核心称作AMP HTML,是一种新型的HTML ...
- Oracle存储过程常用语法及其使用
1.什么是存储过程 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行.它可以接受参数.输出参数,并可以返回单个或多个 ...
- 补充:垃圾回收机制、线程池和ORM缺点
补充:垃圾回收机制.线程池和ORM缺点 垃圾回收机制不仅有引用计数,还有标记清除和分代回收 引用计数就是内存地址的门牌号,为0时就会回收掉,但是会出现循环引用问题,这种情况下会导致内存泄漏(即不会被用 ...
- C语言里面"具有外部链接的静态变量"这里的"链接"是什么意思
首先从静态变量说起. C语言里面静态变量有三种: 分别是外部链接性,内部链接性和无链接性.声明外部链接的变量的方法是在代码块外面声明它. 此变量是全局变量,多文件中亦可用.声明内部链接的变量的方法是在 ...
- ISE 14.7安装教程最新版(Win10安装)
一.下载 第一步下载首先自己下载好四个压缩包,把第一个解压,其余的三个不用解压,然后去第一个解压后的文件夹打开启动程序. 第二步是点击启动程序后会有以下界面 next到下一个界面,这个时候需要把之前没 ...
- java连接redis中的数据查、增、改、删操作的方法
package com.lml.redis; import java.util.HashMap;import java.util.Iterator;import java.util.Map;impor ...
- Spring MVC标签
1.我们平时使用表单的时候,一般都是这样: <form id="form" action="Login.do" method="post&quo ...
- Scala反射(二)
我们知道,scala编译器会将scala代码编译成JVM字节码,编译过程中会擦除scala特有的一些类型信息,在scala-2.10以前,只能在scala中利用java的反射机制,但是通过java反射 ...