软件设计模板方法模式

数据库连接
对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()、useDB()、closeDB()四个方法分别对应这四个步骤。对于不同类型的数据库(如SQL Server和Oracle),其操作步骤都一致,只是连接数据库connDB()方法不同,现使用模板方法模式对其进行设计。

类图

源代码

Java:

package rjsj.no24;

public abstract class Operator {
    public abstract void connDB();

    public void openDB(){
        System.out.println("---打开数据库---");
    }

    public void useDB(){
        System.out.println("---使用数据库---");
    }

    public void closeDB(){
        System.out.println("---关闭数据库---");
    }

    public void display(){
        this.connDB();
        this.openDB();
        this.useDB();
        this.closeDB();
    }
}
package rjsj.no24;

public class Oracle extends Operator{
    @Override
    public void connDB() {
        System.out.println("连接---Oracle---数据库");
    }
}
package rjsj.no24;

public class SQLServer extends Operator{
    @Override
    public void connDB() {
        System.out.println("连接---SQLServer---数据库");
    }
}
package rjsj.no24;

public class Client {
    public static void main(String[] args) {
        Operator dbOperator;

        dbOperator = new SQLServer();
        dbOperator.display();
        System.out.println("**************************************************");
        dbOperator = new Oracle();
        dbOperator.display();
    }
}

C++

#include<iostream>
using namespace std;
class Operator {
public:
    virtual void conn()=0;
    void open() {
        cout<<"打开数据库"<<endl;
    }
    void use() {
        cout<<"使用数据库"<<endl;
    }
    void close() {
        cout<<"关闭数据库"<<endl;
    }
    void display() {
        this->conn();
        this->open();
        this->use();
        this->close();
    }
};
class Oracle: public Operator{
public:
    void conn() {
        cout<<"连接Oracle"<<endl;
    }
};
class SQLServer:public Operator{
public:
    void conn() {
        cout<<"连接SQLServer"<<endl;
    }

};
int main(){
    Operator *db;
    db=new Oracle();
    db->display();
    cout<<"******************************"<<endl;
    db=new SQLServer();
    db->display();
}

运行结果:

原文地址:https://www.cnblogs.com/Arisf/p/15685752.html