经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
Matlab适配器模式 - sw-lab
来源:cnblogs  作者:sw-lab  时间:2019/5/27 8:52:17  对本文有异议

适配器模式是连接两个不兼容接口的桥梁,主要分为三种:类适配器、对象适配器以及接口适配器,本文根据https://blog.csdn.net/u012359453/article/details/79165080所给的例子使用matlab语言对三种适配器进行实现。

已有的接口和类(AC220V):

IAC220V.m

  1. classdef IAC220V < handle
  2. methods(Abstract)
  3. getAC220V(~);
  4. end
  5. end

AC220V.m

  1. classdef AC220V < IAC220V
  2. properties
  3. isAC = true;
  4. voltage = 220;
  5. end
  6. methods
  7. function obj = AC220V(voltage,isAC)
  8. obj.isAC = isAC;
  9. obj.voltage = voltage;
  10. end
  11. function [voltage,isAC] = getAC220V(obj)
  12. voltage = obj.voltage;
  13. isAC = obj.isAC;
  14. end
  15. end
  16. end

目标接口:(DC5V,注意两者的方法签名是不同的)

  1. classdef IDC5V < handle
  2. methods(Abstract)
  3. getDC5V(~);
  4. end
  5. end

类适配器(将AC220V转化成DC5V):

  1. classdef ClassAdapter < AC220V & IDC5V
  2. methods
  3. function obj = ClassAdapter(voltage,isAC)
  4. obj = obj@AC220V(voltage,isAC);
  5. end
  6. function [new_voltage,new_isAC] = getDC5V(obj)
  7. [voltage,isAC] = obj.getAC220V();
  8. new_voltage = 0;
  9. new_isAC = false;
  10. if(isAC)
  11. new_voltage = voltage / 44;
  12. new_isAC = false;
  13. end
  14. end
  15. end
  16. end

对象适配器:

  1. classdef ObjAdapter < IDC5V
  2. properties
  3. pAC220
  4. end
  5. methods
  6. function obj = ObjAdapter(pAC220)
  7. if(metaclass(pAC220) <= ?IAC220V)
  8. obj.pAC220 = pAC220;
  9. end
  10. end
  11. function [new_voltage,new_isAC] = getDC5V(obj)
  12. new_voltage = 0;
  13. new_isAC = false;
  14. if(~isempty(obj.pAC220))
  15. [voltage,isAC] = obj.pAC220.getAC220V();
  16. if(isAC)
  17. new_voltage = voltage / 44;
  18. new_isAC = false;
  19. end
  20. end
  21. end
  22. end
  23. end

接口适配器:

IDCOutput.m (定义通用输出接口)

  1. classdef IDCOutput < handle
  2. methods(Abstract)
  3. getDC5V(~);
  4. getDC12V(~);
  5. end
  6. end

IAdapter.m(定义默认适配器接口)

  1. classdef IAdapter < IDCOutput
  2. properties
  3. power
  4. end
  5. methods
  6. function obj = IAdapter(power)
  7. obj.power = power;
  8. end
  9. function [voltage,isAC] = getDC5V(~)
  10. voltage = 0;
  11. isAC = false;
  12. end
  13. function [voltage,isAC] = getDC12V(~)
  14. voltage = 0;
  15. isAC = false;
  16. end
  17. end
  18. end

AC220VAdapter.m (定义具体适配器方法,AC220V输入为例)

  1. classdef AC220VAdapter < IAdapter
  2. methods
  3. function obj = AC220VAdapter(pAC220V)
  4. obj = obj@IAdapter(pAC220V);
  5. end
  6. function [new_voltage,new_isAC] = getDC5V(obj)
  7. new_voltage = 0;
  8. new_isAC = false;
  9. if(~isempty(obj.power))
  10. [voltage,isAC] = obj.power.getAC220V();
  11. if(isAC)
  12. new_voltage = voltage / 44;
  13. new_isAC = false;
  14. end
  15. end
  16. end
  17. end
  18. end

测试代码

  1. a = ClassAdapter(220,true);
  2. disp(a.getDC5V());
  3. b = ObjAdapter(AC220V(223,true));
  4. disp(b.getDC5V());
  5. c = AC220VAdapter(AC220V(221,true));
  6. disp(c.getDC5V())

原文链接:http://www.cnblogs.com/usaddew/p/10927950.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号