日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++设计模式-抽象工厂模式

發布時間:2025/3/15 c/c++ 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++设计模式-抽象工厂模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

?

基本概念

代碼與實例


?

基本概念

抽象工廠模式(Abstract Factory),提供一個創建一系列相關或相互依賴對象的接口,從而無需指定他們具體的類。

抽象工廠的好處:

? ? ? ? ? ?1. 易于交換產品系列,在一個應用中只需要在初始化的時候出現一次,這就使得改變一個應用的具體工廠變得非常容易,它只需要改變具體工廠即可使用不同的產品配置;

? ? ? ? ? ?2. 讓具體創建實例過程與客戶端分離,客戶端是通過它們的抽象接口操縱實例,產品的具體類名也被具體工廠分離,不會在客戶端代碼中出現

對應的UML圖如下(此圖來源于大話設計模式)

?

代碼與實例

程序運行截圖如下:

源碼如下:

Head.h

#ifndef HEAD_H #define HEAD_H#include <iostream> #include <string> using namespace std;typedef string Department; typedef string User;//IUser接口,用于客戶端訪問,解除與具體數據庫訪問耦合 class IUser{public:virtual void insert(User *user) {}virtual User getUser(int id){ return ""; }virtual ~IUser(){} };//SqlserverUser類,用于訪問SQL Server的User class SqlserverUser : public IUser{public:void insert(User *user);User getUser(int id);~SqlserverUser(); };//AccessUser類,用于訪問Access的User class AccssUser : public IUser{public:void insert(User *user);User getUser(int id);~AccssUser(); };//IDepartment接口,用于客戶端訪問,解除與具體數據庫訪問的耦合 class IDepartment{public:virtual void insert(Department *department){}virtual Department *getDepartment(int id){ return nullptr; }virtual ~IDepartment(){} };//SqlServerDepartment類,用于訪問SQL Server的Department class SqlServerDepartment : public IDepartment{public:void insert(Department *department);Department *getDepartment(int id);~SqlServerDepartment(); };//AccessDepartment類,用于訪問Access的Deparment class AccessDepartment : public IDepartment{public:void insert(Department *department);Department *getDepartment(int id);~AccessDepartment(); };//IFactory接口,定義一個創建訪問Department表對象的抽象的工廠接口 class IFactory{public:virtual IUser *createUser() { return nullptr; }virtual IDepartment *createDepartment(){ return nullptr; }virtual ~IFactory(){} };//SqlserverFactory類,實現IFactory接口,實例化SqlserverUser和SqlserverDepartment class SqlserverFactory : public IFactory{public:IUser *createUser();IDepartment *createDepartment();~SqlserverFactory(); };//AccessFactory類,實現IFactory接口,實例化AccessUser和AccessDepartment class AccessFactory : public IFactory{public:IUser *createUser();IDepartment *createDepartment();~AccessFactory(); };#endif //HEAD_H

Head.cpp

#include "Head.h"void SqlServerDepartment::insert(Department *department) {cout << "在 SQL Server 中給 Department 表增加一條記錄!" << endl; }Department *SqlServerDepartment::getDepartment(int id) {cout << "在 SQL Server 中根據 ID 得到 Department 表中的一條記錄!" << endl;return nullptr; }SqlServerDepartment::~SqlServerDepartment() {cout << "SqlServerDepartment desconstruction ! " << endl; }void AccessDepartment::insert(Department *department) {cout << "在 Access 中給 Department 表增加一條記錄!" << endl; }Department *AccessDepartment::getDepartment(int id) {cout << "在 Access 中根據 ID 得到 Department 表中的一條記錄!" << endl;return nullptr; }AccessDepartment::~AccessDepartment() {cout << "AccessDepartment desconstruction ! " << endl; }void SqlserverUser::insert(User *user) {cout << "在 SQL Server 中給 User 表增加一條記錄!" << endl; }User SqlserverUser::getUser(int id) {cout << "在 SQL Server 中根據ID得到 User 表一條記錄!" << endl;return ""; }SqlserverUser::~SqlserverUser() {cout << "SqlserverUser desconstruction ! " << endl; }void AccssUser::insert(User *user) {cout << "在 Access 中給 User 表增加一條記錄!" << endl; }User AccssUser::getUser(int id) {cout << "在 Access 中根據ID得到 User 表一條記錄!" << endl;return ""; }AccssUser::~AccssUser() {cout << "AccssUser desconstruction ! " << endl; }IUser * SqlserverFactory::createUser() {return new SqlserverUser; }IDepartment * SqlserverFactory::createDepartment() {return new SqlServerDepartment; }SqlserverFactory::~SqlserverFactory() {cout << "SqlserverFactory desconstruction ! " << endl; }IUser * AccessFactory::createUser() {return new AccssUser; }IDepartment * AccessFactory::createDepartment() {return new AccessDepartment; }AccessFactory::~AccessFactory() {cout << "AccessFactory desconstruction ! " << endl; }

main.cpp

#include "Head.h"int main(int *argc, int *argv){User *user = new User();Department *department = new Department();IFactory *factory = new SqlserverFactory();//IFactory *factory = new AccessFactory();IUser *iuser = factory->createUser();iuser->insert(user);iuser->getUser(1);IDepartment *iDepartment = factory->createDepartment();iDepartment->insert(department);iDepartment->getDepartment(1);cout << "\n 開始析構了!" << endl;delete iDepartment;delete iuser;delete factory;delete user;delete department;cout << "\n------------ 華 麗 的 結 束 分 割 線 ------------" << endl;getchar();return 0; }

?

總結

以上是生活随笔為你收集整理的C++设计模式-抽象工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。