工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化那一个类。
应用场景:软件开发中从sql server数据库变更到其他数据库,则会对象绑定到特定数据库,需要灵活化。
特征:实现业务逻辑与数据特征相分离。
方法:分别创建不同数据库工厂和数据操作工厂
UML类图:
示例代码:
-
#include <iostream>
-
#include <string>
-
using namespace std;
-
-
class User
-
{
-
public:
-
int getID()
-
{
-
return id;
-
}
-
void setID(int ID)
-
{
-
id = ID;
-
}
-
string getName()
-
{
-
return name;
-
}
-
void setName(string Name)
-
{
-
name = Name;
-
}
-
private:
-
string name;
-
int id;
-
};
-
-
class IUser
-
{
-
public:
-
virtual void InsertUser(User* user)=0;
-
virtual void getUser(int id)=0;
-
};
-
-
class SQLServerUser : public IUser
-
{
-
void InsertUser(User* user)
-
{
-
cout<<"SQL server user insert "<<endl;
-
}
-
void getUser(int id)
-
{
-
cout<<"SQL server user get infomation"<<endl;
-
}
-
};
-
class ACCESSUser : public IUser
-
{
-
void InsertUser(User* user)
-
{
-
cout<<"ACESS user insert "<<endl;
-
}
-
void getUser(int id)
-
{
-
cout<<"ACESS user get infomation"<<endl;
-
}
-
};
-
class UserFactory
-
{
-
public:
-
virtual IUser* CreateUser()=0;
-
};
-
class SQLServerFactory : public UserFactory
-
{
-
IUser* CreateUser()
-
{
-
IUser * user = new SQLServerUser();
-
return user;
-
}
-
};
-
class ACCESSFactory : public UserFactory
-
{
-
IUser* CreateUser()
-
{
-
IUser * user = new ACCESSUser();
-
return user;
-
}
-
};
-
-
void main()
-
{
-
string str = "hello world!";
-
cout<<str<<endl;
-
-
User* tmp_user = new User();
-
UserFactory* SQLUser = new SQLServerFactory();
-
IUser * user = SQLUser->CreateUser();
-
-
user->getUser(1);
-
user->InsertUser(tmp_user);
-
}
但是,如果增加关于部门表处理,实例化类很多,
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,无需执行他们具体的类
UML类图:
。。。。
阅读(598) | 评论(0) | 转发(0) |