Matlab适配器模式
适配器模式是连接两个不兼容接口的桥梁,主要分为三种:类适配器、对象适配器以及接口适配器,本文根据https://blog.csdn.net/u012359453/article/details/79165080所给的例子使用matlab语言对三种适配器进行实现。
已有的接口和类(AC220V):
IAC220V.m
classdef IAC220V < handle
methods(Abstract)
getAC220V(~);
end
end
AC220V.m
classdef AC220V < IAC220V
properties
isAC = true;
voltage = 220;
end
methods
function obj = AC220V(voltage,isAC)
obj.isAC = isAC;
obj.voltage = voltage;
end
function [voltage,isAC] = getAC220V(obj)
voltage = obj.voltage;
isAC = obj.isAC;
end
end
end
目标接口:(DC5V,注意两者的方法签名是不同的)
classdef IDC5V < handle
methods(Abstract)
getDC5V(~);
end
end
类适配器(将AC220V转化成DC5V):
classdef ClassAdapter < AC220V & IDC5V
methods
function obj = ClassAdapter(voltage,isAC)
obj = obj@AC220V(voltage,isAC);
end
function [new_voltage,new_isAC] = getDC5V(obj)
[voltage,isAC] = obj.getAC220V();
new_voltage = 0;
new_isAC = false;
if(isAC)
new_voltage = voltage / 44;
new_isAC = false;
end
end
end
end
对象适配器:
classdef ObjAdapter < IDC5V
properties
pAC220
end
methods
function obj = ObjAdapter(pAC220)
if(metaclass(pAC220) <= ?IAC220V)
obj.pAC220 = pAC220;
end
end
function [new_voltage,new_isAC] = getDC5V(obj)
new_voltage = 0;
new_isAC = false;
if(~isempty(obj.pAC220))
[voltage,isAC] = obj.pAC220.getAC220V();
if(isAC)
new_voltage = voltage / 44;
new_isAC = false;
end
end
end
end
end
接口适配器:
IDCOutput.m (定义通用输出接口)
classdef IDCOutput < handle
methods(Abstract)
getDC5V(~);
getDC12V(~);
end
end
IAdapter.m(定义默认适配器接口)
classdef IAdapter < IDCOutput
properties
power
end
methods
function obj = IAdapter(power)
obj.power = power;
end
function [voltage,isAC] = getDC5V(~)
voltage = 0;
isAC = false;
end
function [voltage,isAC] = getDC12V(~)
voltage = 0;
isAC = false;
end
end
end
AC220VAdapter.m (定义具体适配器方法,AC220V输入为例)
classdef AC220VAdapter < IAdapter
methods
function obj = AC220VAdapter(pAC220V)
obj = obj@IAdapter(pAC220V);
end
function [new_voltage,new_isAC] = getDC5V(obj)
new_voltage = 0;
new_isAC = false;
if(~isempty(obj.power))
[voltage,isAC] = obj.power.getAC220V();
if(isAC)
new_voltage = voltage / 44;
new_isAC = false;
end
end
end
end
end
测试代码
a = ClassAdapter(220,true);
disp(a.getDC5V()); b = ObjAdapter(AC220V(223,true));
disp(b.getDC5V()); c = AC220VAdapter(AC220V(221,true));
disp(c.getDC5V())
Matlab适配器模式的更多相关文章
- Matlab 绘制三维立体图(以地质异常体为例)
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab slice方法和包络法绘制三维立体图
前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...
- Matlab 高斯_拉普拉斯滤波器处理医学图像
前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...
- MATLAB中绘制质点轨迹动图并保存成GIF
工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...
- PHP设计模式(七)适配器模式(Adapter For PHP)
适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 如下图(借图): // 设置书的接口 // 书接口 interface BookI ...
- linux下配置matlab运行环境(MCR)
在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...
- EMD分析 Matlab 精华总结 附开源工具箱(全)
前言: 本贴写于2016年12与15日,UK.最近在学习EMD(Empirical Mode Decomposition)和HHT(Hilbert-Huang Transform)多分辨信号处理,FQ ...
- Atitit MATLAB 图像处理 经典书籍attilax总结
Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...
- Atitit MATLAB 图像处理attilax总结
Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...
随机推荐
- Windows系统中CreateFileMapping实现的共享内存及用法
在32位的Windows系统中,每一个进程都有权访问他自己的4GB(232=4294967296)平面地址空间,没有段,没有选择符,没有near和far指针,没有near和far函数调用,也没有内存模 ...
- 微信小程序支付接口之Django后台
本文链接:https://blog.csdn.net/qq_41860162/article/details/89098694Python3-django-微信小程序支付接口调用工具类生成一系列微信官 ...
- C#-关于TcpListener的AcceptTcpClient()方法造成线程阻塞,进而程序无法彻底关闭的问题
https://blog.csdn.net/nuistchn/article/details/50809158 在<C#高级编程>第7版第24章,有提到使用TCP类. 书中写了一个实例,两 ...
- 简述 IntentFilter(意图过滤器)
1.什么是IntentFilter ? IntentFilter翻译成中文就是“意图过滤器”,主要用来过滤隐式意图.当用户进行一项操作的时候,Android系统会根据配置的 “意图过滤器” 来寻找可以 ...
- 【C++】C++中explicity关键字的使用
读者可以尝试预言一下这段代码的输出: #include <iostream> using namespace std; class Complex { private: double re ...
- JMH java基准测试
Measure, don’t guess! JMH适用场景 JMH只适合细粒度的方法测试 原理 编译时会生成一些测试代码,一般都会继承你的类 maven依赖 <dependencies> ...
- [转]JS如何判断一个对象是否为空、是否有某个属性
原文地址:https://www.cnblogs.com/crackedlove/p/10039105.html 一.js判断一个对象是否为空 方法一: let obj1 = {} let obj2 ...
- PHP 简易网页访问统计
传统的网页访问统计,已经有很多,如 51la.百度统计.站长统计 一般都需要引用JS,在你的网页内嵌入JS,这个操作存在风险,并且不可控. 可以考虑使用 [img src.css src.link h ...
- Indellij IDEA的菜单 File Edit View等主菜单栏不小心删除,恢复的解决办法
修改以后保存,重启Idea
- wms证书异常问题
目前我司已定位到两个原因,详细如下, 1. 快速生成的证书存在问题,导致APACHE和NGINX显示的时间都是4号凌晨 2. 贵司在配置完成162和163两台应用的APACHE证书,以及其中10. ...