适配器模式是连接两个不兼容接口的桥梁,主要分为三种:类适配器、对象适配器以及接口适配器,本文根据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适配器模式的更多相关文章

  1. Matlab 绘制三维立体图(以地质异常体为例)

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  2. Matlab slice方法和包络法绘制三维立体图

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  3. Matlab 高斯_拉普拉斯滤波器处理医学图像

    前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...

  4. MATLAB中绘制质点轨迹动图并保存成GIF

    工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...

  5. PHP设计模式(七)适配器模式(Adapter For PHP)

    适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 如下图(借图): // 设置书的接口 // 书接口 interface BookI ...

  6. linux下配置matlab运行环境(MCR)

    在安装好的matlab下有MCR(MatlabCompilerRuntime)在matlab2011/toolbox/compiler/deploy/glnxa64下找到MCRInstaller.zi ...

  7. EMD分析 Matlab 精华总结 附开源工具箱(全)

    前言: 本贴写于2016年12与15日,UK.最近在学习EMD(Empirical Mode Decomposition)和HHT(Hilbert-Huang Transform)多分辨信号处理,FQ ...

  8. Atitit MATLAB 图像处理 经典书籍attilax总结

    Atitit MATLAB 图像处理 经典书籍attilax总结 1.1. MATLAB数字图像处理1 1.2. <MATLAB实用教程(第二版)>((美)穆尔 著)[简介_书评_在线阅读 ...

  9. Atitit MATLAB 图像处理attilax总结

    Atitit MATLAB 图像处理attilax总结 1.1. 下载 Matlab7.0官方下载_Matlab2012 v7.0 官方简体中文版-办公软件-系统大全.html1 1.2. Matla ...

随机推荐

  1. 权重轮询调度算法(WeightedRound-RobinScheduling)

    权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现 ----参考Nginx中负载均衡算法实现 这里主要参考这篇文章的实现: Nginx 负载均衡-加权轮询策略 ...

  2. k8s相关

    卸载kubernetes-dashboard kubectl get secret,sa,role,rolebinding,services,deployments --namespace=kube- ...

  3. 变异的功能 | variants function | coding | non-coding

    variant主要分为两类: coding noncoding 这两大类的分析方法截然不同,coding主要直接影响了mRNA和蛋白:而noncoding,主要是影响调控. coding编码区如何分析 ...

  4. XML-Signature 语法和签名

    一段  XML-signature  的 demo: <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> &l ...

  5. 我的Mac上有哪些软件

    工具 Pycharm CE GoLand Chrome 微信 网易云音乐 有道云笔记 iTerm Postman Sublime Text bashrc配置(支持显示git branch以及详细路径信 ...

  6. 华为云ARM64服务器试用

    公司同事弄了个华为云的ARM64服务器,让我帮忙部署我们的服务,所以先试用了一下. 总体感觉还行,使用的CentOS系统,yum也能用,epel源也可以用.但是SCL软件集用不了. uname -a ...

  7. unix_timestamp 时间戳函数用法(hive)

    pandas和SQL数据分析实战 https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2&sha ...

  8. 【大数据】Spark On Yarn

    Spark在YARN中有yarn-cluster和yarn-client两种运行模式: I. Yarn client 在yarn-client模式下,Driver运行在Client上,通过Applic ...

  9. ThinkPHP5中模型关联关系一对一,一对多

    TP5 返回json反斜杠前面转义了class XinDai extends Controller{ public function index(){ $res = [ ['logo'=>'/i ...

  10. SDKMAN一个基于命令行界面的SDK用户环境管理程序

    1.背景 使用过Python开发的朋友,应该了解到Python2和Python3语法的差异,有时候从网上下载了基于不同解释器的代码,要来回切换版本, 使用起来不是很方便,有时候甚至很麻烦.于是有人发明 ...