在模闆模式(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