在模板模式(Template Pattern)中,一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。本文以資料庫SQL語法為例來闡述模板模式的應用場景。由於不同的資料庫SQL語法存在差異,在替換資料庫時需要更改程式大量的SQL語句,而模板 ...
在模板模式(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