我是靠谱客的博主 落寞手套,最近开发中收集的这篇文章主要介绍设计模式之简单工厂模式实例(c++),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简单工厂模式实例之简单电视机工厂:

电视机工厂类图:

从类图可知,TV作为一个抽象产品类,它可以是一个接口,也可以是一个抽象类,其中包含了所有产品都具有的业务方法play()。

抽象产品类TV:

//c++没有Interface,所以用抽象类(纯虚类)来代替 
class TV
{
public:
	virtual void play() = 0;
};

具体产品类HaierTV:

class HaierTV : public TV
{
public:
	void play(){
		cout << "海尔电视机播放中。" << endl;
	};
};

具体产品类HisenseTV:

class HisenseTV : public TV
{
public:
	void play(){
		cout << "海信电视机播放中。" << endl;
	};
};

工厂类TVFactory:

class TVFactory 
{
public:
	static TV* produceTV(string brand){
		if(brand == "Haier"){
			cout << "电视机工厂生产海尔电视机!" << endl;
			return new HaierTV();
		}else if(brand == "Hisense"){
			cout << "电视机工厂生产海信电视机!" << endl;
			return new HisenseTV();
		}else{
			throw "对不起,暂不能生产该品牌电视机!";
		}
	};
};

客户测试类Client:(main)

//Client
int main(void){
	try{
		//纯虚类不能被实例化,可声明指针。
		TV *tv; 
		//这里假装从xml配置文件中读取,可自行编写 
		string brandName = "Haier";
		tv = TVFactory::produceTV(brandName); 
		tv->play();
	}catch(const char* e){
		cout << e << endl;
	}
	return 0;
} 

 

简单工厂模式实例之权限管理:

权限管理类图:

 从类图可知,抽象类User作为抽象产品,是各种具体用户类的父类,其中提供了一系列所有用户子类公有的方法,如“sameOperation()”,同时也定义了抽象方法,如“diffOperation()”,以便不同的子类分别来实现。

抽象产品类User:

//用户类 
class User{
public:
	void sameOperation(){
		cout << "修改个人资料!" << endl;
	}	
	virtual void diffOperation()=0;
}; 

具体产品类Employee:

//员工类 
class Employee : public User{
public:
	Employee(){
		cout << "创建员工对象!" << endl;
	}
	void diffOperation(){
		cout << "员工拥有创建假条权限!" << endl;
	}
};

具体产品类Manager:

//经理类 
class Manager : public User{
public:
	Manager(){
		cout << "创建经理对象!" << endl;
	}
	void diffOperation(){
		cout << "经理拥有创建和审批假条权限!" << endl;
	}
};

 具体产品类Administrator:

//管理员类 
class Administrator : public User{
public:
	Administrator(){
		cout << "创建管理员对象!" << endl;
	}
	void diffOperation(){
		cout << "管理员拥有创建和管理假条权限!" << endl;
	}
};

工厂类UserFactory:

//用户工厂类
class UserFactory{
public:
	static User* getUser(int permission){
		switch(permission){
			case 0:
				return new Employee();
				break;
			case 1:
				return new Manager();
				break;
			case 2:
				return new Administrator();
				break;
			default:
				return nullptr;
				break;
		}
	}
}; 

 用户表数据访问类(模拟)UserDAO:

//用户表数据访问类(模拟)
class UserDAO{
public:
	int findPermisson(string userName,string userPassword){
		//假装访问数据库
		if(userName=="zhangsan" && userPassword=="123456"){
			return 0;
		}else{
			return -1;
		}
	}
}; 

 客户端测试类Client:

//Client
int main(void){
	try{
		User *user;
		UserDAO *userDao= new UserDAO();
		int permission = userDao->findPermisson("zhangsan","123456");
		user = UserFactory::getUser(permission);
		user->sameOperation();
		user->diffOperation();
	}catch(const char* e){
		cout << e << endl;
	}
	return 0;
} 

 

(End)如有疑问或者错误,请指教。


设计模式实例目录

最后

以上就是落寞手套为你收集整理的设计模式之简单工厂模式实例(c++)的全部内容,希望文章能够帮你解决设计模式之简单工厂模式实例(c++)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部