天天看點

Matlab模闆模式

在模闆模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模闆。它的子類可以按需要重寫方法實作,但調用将以抽象類中定義的方式進行。本文以資料庫SQL文法為例來闡述模闆模式的應用場景。由于不同的資料庫SQL文法存在差異,在替換資料庫時需要更改程式大量的SQL語句,而模闆模式能夠将零散的并且随資料庫變化的SQL語句提取出來,提高了軟體的可移植性和相容性,本文依據http://www.w3school.com.cn/sql/sql_top.asp上面給出的文法,設計出了模闆模式:

模闆方法類:

classdef SQLTemplate < handle
    methods(Abstract,Access=protected)
        run_top_sql(obj,top_number,table_name);
    end   
    methods
        function run_top(obj,top_number,table_name)
            try
                obj.begin_conn();
                obj.begin_tran();
                obj.run_top_sql(top_number,table_name);
                obj.commit_tran();
            catch
                obj.rollback_tran();
            end
            obj.end_conn();
        end
        function begin_conn(~)
            disp('開啟資料庫連接配接');
        end
        function begin_tran(~)
            disp('開啟事務');
        end
        function commit_tran(~)
            disp('送出事務');
        end
         function rollback_tran(~)
            disp('復原事務');
        end
        function end_conn(~)
            disp('關閉資料庫連接配接');
        end
    end
end
      

具體實作類--MySQL類:

classdef MySQL < SQLTemplate
     methods(Access=protected)
         function run_top_sql(~,top_number,table_name)
               disp(['select * from ',table_name,' limit ',num2str(top_number)]);
         end
    end  
end
      

具體實作類--Oracle類:

classdef Oracle < SQLTemplate
     methods(Access=protected)
         function run_top_sql(~,top_number,table_name)
               disp(['select * from ',table_name,' where ROWNUM <= ',num2str(top_number)]);
         end
    end  
end
      

具體實作類--SQLServer類:

classdef SQLServer < SQLTemplate
     methods(Access=protected)
         function run_top_sql(~,top_number,table_name)
               disp(['select top ',num2str(top_number),' * from ',table_name]);
         end
    end  
end