Matlab适配器模式(Adapter)

25 篇文章 2 订阅
21 篇文章 1 订阅

适配器模式是连接两个不兼容接口的桥梁,主要分为三种:类适配器、对象适配器以及接口适配器,本文根据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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值