大话设计模式抽象工厂模式c++实现

抽象工厂模式

其他二十三种设计模式

#include<iostream>

using namespace std;
//抽象工厂模式
//抽象用户类
class AbstractUser {
    
    
public:
	virtual void Inser() = 0;
};

//具体用户类
class SqlserverUser :public AbstractUser {
    
    
public:
	virtual void Inser() {
    
    
		cout << "在SQL server中给User表中增加一条记录" << endl;
	}
};

class AccessUser :public AbstractUser {
    
    
public:
	virtual void Inser() {
    
    
		cout << "在Access中给User表中增加一条记录" << endl;
	}
};

//抽象部门类
class AbstractDepartment{
    
    
public:
	virtual void Inser() = 0;
};

//具体部门类
class SqlserverDepartment :public AbstractDepartment{
    
    
public:
	virtual void Inser() {
    
    
		cout << "在SQL server中给Department表中增加一条记录" << endl;
	}
};

class AccessDepartment :public AbstractDepartment{
    
    
public:
	virtual void Inser() {
    
    
		cout << "在Access中给Department表中增加一条记录" << endl;
	}
};

//抽象工厂类
class AbstractFactory {
    
    
public:
	virtual AbstractUser* User() = 0;
	virtual AbstractDepartment* Department() = 0;
};

//具体工厂类
class SqlserverFactory :public AbstractFactory {
    
    
public:
	virtual AbstractUser* User() {
    
    
		return new SqlserverUser;
	}
	virtual AbstractDepartment* Department() {
    
    
		return new SqlserverDepartment;
	}
};

class AccessFactory :public AbstractFactory {
    
    
public:
	virtual AbstractUser* User() {
    
    
		return new AccessUser;
	}
	virtual AbstractDepartment* Department() {
    
    
		return new AccessDepartment;
	}
};

void test1() {
    
    
	//Client
	AbstractFactory*    factory = NULL;
	AbstractUser*       user = NULL;
	AbstractDepartment* department = NULL;

	factory = new AccessFactory;
	user = factory->User();
	user->Inser();

	delete user;
	delete factory;

	factory = new SqlserverFactory;
	department = factory->Department();
	department->Inser();

	delete department;
	delete factory;
}
int main()
{
    
    
	test1();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/wode_0828/article/details/114143394
今日推荐