欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Matlab适配器模式

程序员文章站 2022-04-03 08:43:23
适配器模式是连接两个不兼容接口的桥梁,主要分为三种:类适配器、对象适配器以及接口适配器,本文根据https://blog.csdn.net/u012359453/article/details/79165080所给的例子使用matlab语言对三种适配器进行实现。 已有的接口和类(AC220V): I ......

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