适配器模式是连接两个不兼容接口的桥梁,主要分为三种:类适配器、对象适配器以及接口适配器,本文根据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. Understanding Variational Autoencoders (VAEs)

    Understanding Variational Autoencoders (VAEs) 2019-09-29 11:33:18 This blog is from: https://towards ...

  2. Sublime Text 3.2.1详细安装破解教程,附最新激活码license(全网独家可用有效)

    title: "Sublime Text 3.2.1详细安装破解教程,附最新激活码license(全网独家可用有效)" categories: soft tags: soft au ...

  3. 将innodb置为只读模式

    1.关闭change bufferset global.innodb_change_buffering=0; 2.将mysql执行slow shutdown(即干净关闭)set global.inno ...

  4. 【转】SQL2008 链接Oracle 调用存储过程

    1. SQL链接ORACLE 都是可视化的操作 如下图: 红色框选的是oracle的数据驱动,如果没有这个驱动 那需要单独安装oracle的client端 装完以后就有了. 2.在创建之前,在SQLS ...

  5. 015 vue的项目

    一:搭建项目 1.框架 在原有的基础上 src: 2.index.html <!DOCTYPE html> <html lang="en"> <hea ...

  6. Android闪屏问题的分析思路

    http://www.devba.com/index.php/archives/6157.html  Android闪屏问题的分析思路 作者:孤风一剑   发布:2015-01-22 12:35   ...

  7. ubuntu16.04+cuda8.0+cudnn6.0安装mxnet(极简!+成功!)

    安装MXNet 1.安装 CUDA8.0对应的mxnet版本是mxnet-cu80(同理如果是CUDA9.0对应版本则是mxnet-cu90). 如果pip安装过慢,请参考 Ubuntu16.10下配 ...

  8. 领域模型/DDD领域驱动设计

    http://www.fanyilun.me/2018/04/08/%E8%B0%88%E8%B0%88%E9%A2%86%E5%9F%9F%E5%BB%BA%E6%A8%A1/ http://www ...

  9. Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)

    一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...

  10. 移动APP接口安全性设计

    移动APP接口是怎么保证安全性的,可以采用https,或者是非对称加密. 接口加密的目的是防止被别人用抓包工具,抓包后篡改数据. 关于加密算法常见的有对称加密(DES)和非对称加密(RSA) 对称加密 ...