软件设计24|模式方法模式
一、Java版本
(1)效果如下:
(2)类图如下:
(3)工程目录如下:
(4)代码如下:
Client.java
1 package template; 2 3 public class Client { 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 DBOperator dBOperator; 8 // SQL Server 9 System.out.println("----SQL Server----"); 10 dBOperator = new SQLServerDBOperator(); 11 dBOperator.process(); 12 // Oracle 13 System.out.println("----Oracle----"); 14 dBOperator = new OracleDBOperator(); 15 dBOperator.process(); 16 } 17 18 }
DBOperator.java
1 package template; 2 3 public abstract class DBOperator { 4 public void process() { 5 connDB(); 6 openDB(); 7 useDB(); 8 closeDB(); 9 } 10 11 public abstract void connDB(); 12 13 public void openDB() { 14 System.out.println("打开数据库"); 15 } 16 17 public void useDB() { 18 System.out.println("使用数据库"); 19 } 20 21 public void closeDB() { 22 System.out.println("关闭数据库"); 23 } 24 }
OracleDBOperator.java
1 package template; 2 3 public class OracleDBOperator extends DBOperator { 4 5 @Override 6 public void connDB() { 7 // TODO Auto-generated method stub 8 System.out.println("连接Oracle数据库"); 9 } 10 11 }
SQLServerDBOperator.java
1 package template; 2 3 public class SQLServerDBOperator extends DBOperator { 4 5 @Override 6 public void connDB() { 7 // TODO Auto-generated method stub 8 System.out.println("连接SQLServer数据库"); 9 } 10 11 }
参考链接:设计模式-模板方法模式
二、C++版本
(1)效果如下:
(2)类图如下:
(3)代码如下:
1 #include<iostream> 2 using namespace std; 3 4 class DBOperator { 5 public: 6 void process() { 7 connDB(); 8 openDB(); 9 useDB(); 10 closeDB(); 11 } 12 virtual void connDB() = 0; 13 void openDB() { 14 cout << "打开数据库" << endl; 15 } 16 void useDB() { 17 cout << "使用数据库" << endl; 18 } 19 void closeDB() { 20 cout << "关闭数据库" << endl; 21 } 22 }; 23 24 class OracleDBOperator: public DBOperator { 25 public: 26 void connDB() { 27 cout << "连接Oracle数据库" << endl; 28 } 29 }; 30 31 class SQLServerDBOperator : public DBOperator { 32 public: 33 void connDB() { 34 cout << "连接SQL Server数据库" << endl; 35 } 36 }; 37 38 int main() { 39 DBOperator* dBOperator; 40 cout << "----SQL Server----" << endl; 41 dBOperator = new SQLServerDBOperator(); 42 dBOperator->process(); 43 cout << "----Oracle----" << endl; 44 dBOperator = new OracleDBOperator(); 45 dBOperator->process(); 46 }