Matlab适配器模式(Adapter)

    xiaoxiao2025-04-28  24

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

    运行结果:

    参考资料:

    https://blog.csdn.net/qq_42606051/article/details/81179480

    https://blog.csdn.net/zxt0601/article/details/52848004

    https://blog.csdn.net/u012359453/article/details/79165080

    https://www.cnblogs.com/joy99/p/6186423.html

    https://blog.csdn.net/lmb55/article/details/51008762

    最新回复(0)