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 ...
随机推荐
- 解决vue项目路由出现message: "Navigating to current location (XXX) is not allowed"的问题(点击多次跳转)
如果网页跳转用的方法传参去跳转: (点击多次链接会出现错误) <a class="" href="javascript:void(0);" @click= ...
- sumdoc t411 dir.txt
C:\Users\zhoufeiyue\Documents\sumdoc t411\(9+条消息)redis Jedis存取list对象和map - shenjianxz的博客 - CSDN博客.mh ...
- BGP MPLS IP V匹N基本概念
BGP/MPLS IP VPN基本概念 Site 在介绍VPN时经常会提到"Site",Site(站点)的含义可以从下述几个方面理解: · Site是指相互之间具备IP连通性的一组 ...
- 爬虫中采集动态HTML介绍
JavaScript JavaScript 是网络上最常用也是支持者最多的客户端脚本语言.它可以收集 用户的跟踪数据,不需要重载页面直接提交表单,在页面嵌入多媒体文件,甚至运行网页游戏. 我们可以在网 ...
- SpringBoot入门-JPA(三)
什么是JPA JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. pom.xml <par ...
- 查找算法(2)--Binary chop--二分查找
1. 二分查找 (1)说明 元素必须是有序的,如果是无序的则要先进行排序操作. (2)基本思想: 也称为是折半查找,属于有序查找算法.用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表, ...
- k8s记录-docker导入导出改标签
docker save <repository>:<tag> -o <repository>.tar docker save mysql:latest -o m ...
- python自动化接口测试
前几天,同组妹子说想要对接口那些异常值进行测试,能否有自动化测试的方法.仔细想了一下,工具还挺多,大概分析了一下: 1.soapui:可以对接口参数进行异常值参数化,可以加断言,一般我们会加httpc ...
- [No000019A]IDEA 设置手册
[No000019A]idea设置手册.rar IDEA 设置手册 IDEA 设置手册 plugin lgnore files and folesrs 代码管控 程序框架 部署方式 useless 3 ...
- 大数据开发工程师面试《一》Shopee虾皮技术面
一.项目问题 1 做了哪些项目2 使用什么技术3 哪个是你主导的项目,一共开发多少个接口,项目多长时间,数据库有多少个表 二.技术问题 1 用自己擅长的语言实现非递归单链表反转 现场手写2 Hadoo ...