zoukankan      html  css  js  c++  java
  • Matlab适配器模式

    适配器模式是连接两个不兼容接口的桥梁,主要分为三种:类适配器、对象适配器以及接口适配器,本文根据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())
  • 相关阅读:
    Android Studio生成APK自动追加版本号
    jquery.nicescroll.min.js滚动条使用方法
    Guid.NewGuid().ToString()生成唯一码js
    解决移动端H5海报滑动插件适应大部分手机问题 手机端高度自适应
    SouthidcEditor编辑器如何支持上传png图片
    谈灰色行业网站建设需要注意的事项
    33个免费的电子商务图标集
    WebKit的已实施srcset图像响应属性
    免费清新浅色图标集
    闪光的不一定是金子:设计数据的一种常见误解
  • 原文地址:https://www.cnblogs.com/usaddew/p/10927950.html
Copyright © 2011-2022 走看看