前言

在第一回合中留下的问题,http://www.cnblogs.com/aehyok/archive/2013/05/19/3087497.html,现在就先处理一个简单的,只添加一个Department表。

第二回合

首先要建立部门类,假设只有两个字段部门ID,和部门名称。

    public class Department{public int ID { get; set; }public string DeptName { get; set; }}

下面看一下添加了部门表的UML类图

IDpartment接口,用于客户端访问,解除与具体数据库访问的耦合。

    interface IDepartment{void Insert(Department department);Department GetDepartment(int id);}

SqlServerDepartment类,用于访问Sql Server的Department.

    public class SqlServerDepartment : IDepartment{public void Insert(Department department){Console.WriteLine("在Sql Server中给Department表增加一条记录");}public Department GetDepartment(int id){Console.WriteLine("在Sql Server中根据ID得到Department表一条记录");return null;}}

AccessDepartment类,用于访问Access的Departmet。

    public class AccessDepartment : IDepartment{public void Insert(Department department){Console.WriteLine("在Access中给Department表增加一条记录");}public Department GetDepartment(int id){Console.WriteLine("在Access中根据ID得到Department表一条记录");return null;}}

IFactory接口,定义一个创建访问Department表对象的抽象的工厂接口。

    interface IFactory{IUser CreateUser();IDepartment CreateDepartment();}

在IFactory接口中又新添加了CreateDepartment()接口方法

SqlServerFactory类,实现IFactory接口,主要是实现Sql Server数据库添加了的部门接口方法。

    public class SqlServerFactory : IFactory{IUser IFactory.CreateUser(){return new SqlServerUser();}public IDepartment CreateDepartment(){return new SqlServerDepartment();}}

AccessFactory类,实现IFactory接口,主要是实现Access数据库添加了的部门接口方法。

    public class AccessServerFavtory : IFactory{IUser IFactory.CreateUser(){return new AccessUser();}public IDepartment CreateDepartment(){return new AccessDepartment();}}

客户端代码

    class Program{static void Main(string[] args){User user = new User();Department dept = new Department();IFactory factory = new AccessFactory();IUser iu=factory.CreateUser();iu.Insert(user);iu.GetUser(1);IDepartment id = factory.CreateDepartment();id.Insert(dept);id.GetDepartment(1);Console.ReadLine();}}

现在如果想切换数据库,只需要IFactory factory = new AccessFactory();修改为IFactory factory=new SqlServerFactory();
只有一个Uer类和User操作类的时候,是只需要工厂方法模式的,但是现在显然你数据库中有很多的表,而Sql Server与Access又是两大不同的分类,所以解决这种涉及多个产品系列的问题,有一个专门的工厂模式叫抽象工厂模式。

总结

通过第一回合和第二回合的前奏,我们终于可以进入正题了。

设计模式之四(抽象工厂模式第二回合)相关推荐

  1. 设计模式之四(抽象工厂模式第一回合)

    前言 首先关于抽象工厂模式的学习,我们需要慢慢的,由浅入深的进入.不能单刀直入,否则可能达不到预期学明白的目标. 第一回合 首先我们从最简单的数据访问程序开始吧. 下面先来看一个简单的小例子,代码很简 ...

  2. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  3. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  4. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  5. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  6. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  7. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  8. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  9. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

最新文章

  1. [名词解释] intuitive
  2. 关闭弹出窗口刷新父窗口
  3. redis zset转set 反序列化失败_Redis只往zset有序集合添加不存在的数据:关键字索引查询构建+源码分析...
  4. bootstrap 模态框满屏_解决Ueditor在bootstarp 模态框中全屏问题
  5. 计算机组成原理课程设计a,计算机组成原理课程设计报告.doc
  6. svn安装教程 mysql_CentOS6.4 下安装SVN的详细教程(超详细)
  7. math.floor实现四舍五入
  8. 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性...
  9. 计算机绘图自考知识点,全国自考机械制图一试题2004.04
  10. ajax音乐网站,AJAX在线音乐网站(5)测试
  11. java 设置内存参数_Java虚拟机内存参数设置
  12. 用C语言写一个查单词的小demo
  13. android httpclient 设置超时
  14. 在电脑上如何用桌面便签进行日程管理?
  15. 我用Python分析1585家电商车厘子销售数据,发现这些秘密
  16. 数据竞赛:工业互联网算法大赛能源赛道风机轴承剩余寿命预测
  17. DNS基础之使用dig查询DNS解析过程
  18. 博客园添加导航目录(转)
  19. vue3+vite中显示img图片,显示不出来问题。
  20. Spark:reduceByKey与groupByKey进行对比

热门文章

  1. 不需要安装max或者xcode的object C开发环境
  2. CRegKey 注册表操作
  3. MachineLearning(10)-聚类
  4. Python模块(2)-Numpy 简易使用教程
  5. python用pip安装pillow_cent 6.5使用pip安装pillow总是失败
  6. C++primer第八章 IO库 8.2 文件输入输出
  7. 我的职业生涯规划学习日记(软件工程)整理时间线
  8. 人最重要的能力是什么?
  9. 8款最受欢迎的HTML5/CSS3应用及代码
  10. 架构设计--仅是软件开发之第二大影响力?!