重温设计模式(五)——我所理解的“抽象工厂”

在各位读这篇文章之前,我给大家一个提醒,我的文章也许称不上一个设计模式类的文章,只能算是自己在项目中的一个设计总结,在这里,我很欢迎大家和我一起讨论。但是同时我想说,我写博客的目的本身就是希望我的经验可以提醒他人,但是如果造成了一种相反的影响,那就违背我的初衷了,所以希望大家对我的观点思考,思考,再思考!另外,感谢Jake.NET,装配脑袋,横刀天笑等对我的鼓励。

1.代码引子

让我们由一段代码引出我们的这篇文章。

相信每个人,无论是B/S,还是C/S。都无可避免地要去和数据库打交道。那么这样的代码再常见不过:

static void Main(string[] args)
{
  string connectionString = ".........";
  SqlConnection thisConnection = new SqlConnection(connectionString);
  string commandString = "select * from A";
  using (thisConnection)
  {
    thisConnection.Open();
    SqlCommand thisCommand = new SqlCommand(commandString, thisConnection);
    thisCommand.ExecuteNonQuery();
  }
}

这样的代码在平时无可争议,运行得也很棒。

可是我在公司就遇到过这样的情况,客户偏偏说,他们觉得SQL Server不好,不能满足什么什么的需求,虽然他说的是谬论,但是我们也必须得去满足客户的需求。

然后就去按照他们的要求去换成Oracle的数据库。却发现工作量非常非常大。于是这个单子就谈丢了。

错误出在哪里?

2.怎么样去修改?

string connectionString = ".............";
OracleConnection thisConnection = new OracleConnection(connectionString);
string commandString = "select * from A";
using (thisConnection)
{
  thisConnection.Open();
  OracleCommand thisCommand = new OracleCommand(commandString, OracleConn);
  thisCommand.ExecuteNoQuery();
}

每一处,我们都需要把代码改成这个样子,我么知道,在一个程序中,涉及到数据库操作的代码是无处不在的。这样大的工作量,果然不是短时间内可以完成的。更重要的是,很可能因为疏漏而让一个操作完蛋………

3.引出抽象工厂

我一直没搞明白这个名字是什么意义,为什么是抽象工厂呢??

这个问题我们不去讨论了。步入正式话题,让我们看看究竟什么是抽象工厂,他的目的是什么?

提供一个创建一系列相关相关或互相依赖对象的接口,而无需指定他们具体的类。

接下来还是老套路,让我们看看他的UML图:

时间: 2025-01-30 13:11:07

重温设计模式(五)——我所理解的“抽象工厂”的相关文章

Head First设计模式之抽象工厂模式

一.定义 给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足一下条件:     1)系统中有多个产品族,而系统一次只可能消费其中一族产品.      2)同属于同一个产品族的产品以其使用.  二.结构 抽象工厂模式的各个角色(和工厂方法一样):      1)抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关.是具体工厂角色必须实现的接口或者必须继承的父类.在java中它由抽象类或者接口来实现.      2)具体工厂角色:它含有和具体业务逻辑有关的代码.

设计模式:抽象工厂方法模式

之前写的模式帖子:  设计模式系列目录 今天说一下抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类. 抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道实际产出的具体产品是什么,这样一来,客户就从具体的产品中被解耦 我之前说过设计模式:工厂方法模式,我们最后会做一下两种模式的区别 我们看用类图看一下这个模式 每个抽象产品都有多于一个的一个人的具体子类,工厂角色怎么知道实例化哪一个子类?比如我们这个图,每个抽象产品都有两个具体产品, 抽象工厂有两个具体

思想上移,行动下移——抽象工厂+反射+配置文件

  从网上查找资料的时候发现很多同学都写过这篇博客了,可见我的方向没有跑偏.虽然我们学设计模式的时候已经接触过抽象工厂模式,大话设计模式中每个设计模式都紧密联系生活,而且主人公讲的也相当有趣,但是真正运用起来却没那么简单.可以说小菜只是帮我们理解了各个设计模式的用途以及优缺点,真正的理解还需要我们自己动手实践.   为什么要用抽象工厂?   主要就是为了提高软件的灵活性,运用抽象工厂+反射+配置文件可以很方便的更换数据库.引入接口之后,就可以对外提供一致的接口,而我们既可以用SQLServer实

C# 设计模式----抽象工厂模式

原文地址:C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性.但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题,这是

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

原文:C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性.但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题,这是本专

重温设计模式(六)—— 阶段总结一

1.写在前面的 在文章开始之前,先写一些废话,不知不觉把重温设计模式写完了五篇. 下面的文章,算是对以上五篇文章的一个阶段性总结和反省. 首先,我得特别感谢winter-cn不厌其烦地指出我在设计模式应用中的一个又一个错误,如果没有他,很多东西我还是会继续地错下去. 另外,也感谢博客园众多园友对我的鼓励,让我有勇气再次写下去. 2.步入正题1--享元模式 享元模式运用共享技术有效地支持了大量细粒度的对象,解决了大量对象造成的内存开销问题. 何时采用享元模式: 在这里我补充两个很重要的概念:内蕴状

重温设计模式(四)——工厂模式

1.写在前面 这篇文章是我酝酿了近一个月的时间写出来的,我想在第一个模式上就写出工厂模式,却一直推迟到现在. 工厂模式,看似很容易,很常见,但是学习设计模式两年,我至今仍未能真正地充分理解工厂模式的意图.工厂模式好在哪,他究竟解决了什么问题,工厂还是不工厂,困扰了我整整两年. 从无模式,到为模式而模式,在到今天的重温设计模式.我已经记不清大多数模式的样式了,只记得一系列的设计原则,然后去思考模式的综合.但是工厂模式,至今我仍然难以理解. 写出这篇文章,更多的目的是为了抛砖引玉,希望大家能够多多指

《设计模式》学习笔记4——抽象工厂模式

定义 在进行工厂方法模式学习的时候,发现工厂方法模式有一个明显的缺陷,即每增加一个具体的产品都需要至少增加两个类,一个产品类,一个对应的工厂类. 这种情况在产品特别多的情况下,显然就更有问题,然后便有了抽象工厂模式,来解决这个问题. 抽象工厂模式引用书中的定义如下: 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.抽象工厂模式又称为Kit模式,它是一种对象创建型模式 理解 抽象工厂模式相对于前两个工厂模式都要难

设计模式之抽象工厂模式

关于设计模式找到了一个系列讲的非常到位,也很容易让人理解,这里我也是看下面的博客来理解抽象工厂模式. http://blog.csdn.net/column/details/loveyun.html?&page=2 理解抽象工厂应先了解产品族.产品等级的概念: 所谓产品族,是指位于不同产品等级结构中,功能相关联的产品组成的家族.比如AMD的主板.芯片组.CPU组成一个家族,Intel的主板.芯片组.CPU组成一个家族.而这两个家族都来自于三个产品等级:主板.芯片组.CPU.一个等级结构是由相同的