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

前言

在第一回合中留下的问题,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又是两大不同的分类,所以解决这种涉及多个产品系列的问题,有一个专门的工厂模式叫抽象工厂模式。

总结

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一章-起步

1、安装python3环境 windows: 到python官网下载python3安装包,下载地址:https://www.python.org/ftp/python/3.7.3/python-3.7.3-amd64.exe 双击安装运行即可,注意:需要勾选add python 3.7 to path linux: …

ASP.NET 4.0升级至ASP.NET 4.5需要注意的地方

原文 http://www.cnblogs.com/dudu/archive/2013/05/20/3087791.html 原以为只要在Visual Studio 2012中将每个项目的Target framework设置为.NET Framewor 4.5进行编译,然后在web.config中设置compilation的targetFramework为4.5,就升级到了ASP.NET 4.5…

chrome扩展之3:一步步跟我学开发一个表单填写扩展

这节课实现的效果如下图所示: 我们先想一想,怎么样才可以在搜索框上输入内容呢,当然可以手动输入^_^,除了这个之外呢?如果您有这个页面的后台编辑权限就可以直接修改这个页面的内容。当然,这个页面是google的,我们没有…

mysql 重置root密码

myini文件增加命令 (1)在my.ini文件的[mysqld]块下增加“skip_grant_tables”,然后重启mysql服务,再以管理员权限打开cmd执行一些列命令重置密码 mysql> use mysql;Database changedmysql> update user set authentication_…

[读书笔记]TCP/IP详解V1读书笔记-3

IP: 无连接:数据报到达没有先后顺序,处理先后发送的数据报之间没有关联。 不可靠:数据报丢失后没有处理,简单向源地址发送 ----------------------------- ---------------------------------- 网络字节序:…

CAL(1)

为什么80%的码农都做不了架构师?>>> CAL(1) BSD General Commands Manual CAL(1) NAME cal - displays a calendar SYNOPSIS cal [-smjy13] [[[day] month] year] DESCRIPTION Cal displays a simple calendar. If arguments …

vbox虚拟机配置Redhat6.4本地yum源

作为一个新手,配置这个yum源配了4天,遇到了各种问题,也按照网络上面一些方法在163上面下载CentOS6的yum源来替换Redhat本地的yum源,但是配置过程中,出现很多错误,发现直接在本地配置yum源会更便捷一点&…

美化系统

作为一个有强迫症都人,对系统都美化一定要做的!优雅都环境总给人带来美好都心情! 今天参照http://www.linuxidc.com/提供都方法着实把Ubuntu美化了了一下,尤其是shell终端,非常合适俺都口味! 上图 转载于:h…

毕业两年返校随想

就西安这个伤心之地我竟然可以连续呆上一周,真是难得。不过还好,有书看,在接连三天且比以前上研时还高的频率出现在母校的自习室后,我发现,原来我是如此地喜欢大学校园。 我全无要抢占“道德制高点”的意思&#xff0…

创建单IP的***网络

一、架构1.1现有网络现有网络架构如图一所示,其中服务器网段为192.168.0.x使用专门线路接入internet,192.168.88.x为网络设备网段,其它都是办公网段使用另外的线路接入internet。图一、现有网络结构图1.2 ***架构在图一所示的网络架构中搭建一…

为Java应用程序加上退出事件处理(ShutdownHook)

ShutdownHook 是这样一个概念:向虚拟机注册一个线程,当程序退出(CtrlC)时虚拟机会启动这个线程,我们可以在这个线程的run()中做一些清除的工作,如:释放数据库连接,关闭文件等. 注册: Runtime.getRuntime().addShutdownHook(Thread t); 注销: Runtime.get…

烂泥:利用Diskgen找回分区破坏前的资料

本文首发于烂泥行天下,由秀依林枫提供友情赞助。呵呵,好久没有写过博客了。看看时间上一篇博客应该是在一个月之前发布的,最近事情比较多大部分时间都是在出差。自己对技术也没有什么研究的,就说说这次项目中碰到的一个有关数据恢…

40幅非常精美的字体艺术作品欣赏(上篇)

这篇文章和大家分享40幅非常精美的字体艺术作品。字体原来也可以设计得这么美,真是不可思议,一起欣赏吧。 Computer Arts Magazine by Steven Bonner Tangled Handmade Font by Katya Belkina Typo Graphic Design by Andrei D. Robu Peace by Piece Fon…

mysql设置不区分大小写

mysql设置不区分大小写 1.windows下 到安装mysql的目录,修改my.ini文件 在文件最后一行加上下面一句话 lower_case_table_names1 lower_case_table_names 1说明 0:区分大小写,1:不区分大小写 效果如下 [mysqld] port 3306 b…

k8s 组件介绍-API Server

API Server简介 k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。 kubernetes API Server的功能: 提供了集群管理的REST API接口(包括认证授权、数据校…

分布式版本控制系统入门

简介 在过去几年,对于分布式版本控制可以给开发过程提供的益处有许多争论。最近,分布式工具已经很成熟了。尽管分布式工具的一些优点最初可能不明显,但是从长期来看,它们提供的灵活性是非常有意义的。阅读完本文之后,您…

Hadoop源生实用工具之distcp

1 概览 DistCp(Distributed Copy)是用于大规模集群内部或者集群之间的高性能拷贝工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中…

如何使用spy ++ (How to use Spy ++)

一个网友在我的一篇随笔后问道,如何使用spy 查找要用到的窗体类名以及相关信息 现把相关作法整理如下 如果你装了vs.net,在vs.net的工具里面就可以看到spy 打开spy ,会以树状图显示当前系统所有的窗体信息,如下所示 然后找到…

PL/SQL Developer 9 注册机

软件下载:下载 注册机下载:下载 说明:测试版本--9.0.1.1613(无需替换文件,输入注册信息即可) 附图: 转载于:https://www.cnblogs.com/zhanqi/archive/2011/10/12/2208750.html

程序图片运行效果存在偏差问题

2019独角兽企业重金招聘Python工程师标准>>> 当图片放到高分辨率的文件夹下,运行程序的手机却是低分辨率时就会出现该问题。解决办法很容易,就是把图片换个文件夹。比如图片放到drawable-xhdpi下,而模拟器是480*800,图…