Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1428804
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-02-21 16:52:28

工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化那一个类。
应用场景:软件开发中从sql server数据库变更到其他数据库,则会对象绑定到特定数据库,需要灵活化。
特征:实现业务逻辑与数据特征相分离。
方法:分别创建不同数据库工厂和数据操作工厂
UML类图:

示例代码:

点击(此处)折叠或打开

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;

  4. class User
  5. {
  6. public:
  7.     int getID()
  8.     {
  9.         return id;
  10.     }
  11.     void setID(int ID)
  12.     {
  13.         id = ID;
  14.     }
  15.     string getName()
  16.     {
  17.         return name;
  18.     }
  19.     void setName(string Name)
  20.     {
  21.         name = Name;
  22.     }
  23. private:
  24.     string name;
  25.     int id;
  26. };

  27. class IUser
  28. {
  29. public:
  30.     virtual void InsertUser(User* user)=0;
  31.     virtual void getUser(int id)=0;
  32. };

  33. class SQLServerUser : public IUser
  34. {
  35.     void InsertUser(User* user)
  36.     {
  37.         cout<<"SQL server user insert "<<endl;
  38.     }
  39.     void getUser(int id)
  40.     {
  41.         cout<<"SQL server user get infomation"<<endl;
  42.     }
  43. };
  44. class ACCESSUser : public IUser
  45. {
  46.     void InsertUser(User* user)
  47.     {
  48.         cout<<"ACESS user insert "<<endl;
  49.     }
  50.     void getUser(int id)
  51.     {
  52.         cout<<"ACESS user get infomation"<<endl;
  53.     }
  54. };
  55. class UserFactory
  56. {
  57. public:
  58.     virtual IUser* CreateUser()=0;
  59. };
  60. class SQLServerFactory : public UserFactory
  61. {
  62.     IUser* CreateUser()
  63.     {
  64.         IUser * user = new SQLServerUser();
  65.         return user;
  66.     }
  67. };
  68. class ACCESSFactory : public UserFactory
  69. {
  70.     IUser* CreateUser()
  71.     {
  72.         IUser * user = new ACCESSUser();
  73.         return user;
  74.     }
  75. };

  76. void main()
  77. {
  78.     string str = "hello world!";
  79.     cout<<str<<endl;

  80.     User* tmp_user = new User();
  81.     UserFactory* SQLUser = new SQLServerFactory();
  82.     IUser * user = SQLUser->CreateUser();

  83.     user->getUser(1);
  84.     user->InsertUser(tmp_user);
  85. }
但是,如果增加关于部门表处理,实例化类很多,
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,无需执行他们具体的类

UML类图:


。。。。
阅读(585) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~