概述
简单工厂模式实例之简单电视机工厂:
电视机工厂类图:
从类图可知,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++)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复