《软件设计精要与模式》读书笔记(五)&工厂模式资料汇总&提议

     在写这篇随笔的时候,我考虑了很久,第一,其实在博客园中已经有很多篇关于工厂模式的随笔了,如果我再继续写,我发现我也超不过前面已经写过的“前辈”:);第二,《软件设计精要与模式》的第二篇第六章个人感觉写的也不是特别好,仅仅可以作为初步学习工厂模式的资料来参考,我再把这些读书笔记写出来也没有太多意义。所以我写这篇读书笔记将博客园里面关于工厂模式写的比较好的资料给大家整理出来,方便浏览。

     另外博客园里面关于工厂资料的重复资料太多了,建议大家以后写的时候先看看有没有,你自己写出来可以方便自己和大家,这种我们大家鼓励和赞扬,但是尽写些重复的东西就是你的不对了,更大的不是就是你还发表出来占首页。。。;还有,希望别人在转摘别人的内容时,能够注明出处,我今天浏览别人随笔时,发现有转帖的,但是没有看到出处,我想引用的时候,不知道原作者。所以我引用了作者文章,但是由于不知道原作者而没有注明的,希望原作者不要介意或者跟我说明我将更新随笔;第三,如果在自己博客里面附加源码的,最好能够说明一下源码使用环境,比如.NET2003+MSSQL等等,同时建议不要使用太高版本的源码环境。

     这里还要说明一下,我之所以将这篇文章放在博客园首页,是因为我对我上面的三个提议考虑再三,决定将这篇随笔放在首页,并不是因为我转摘了一些大家的文章,如果大家因为此对我有意见,我这里也先跟大家道歉了。

     

     首先,工厂模式的一些基本信息大家还是要知道的:(这里有部分资料是从一些博客里面摘抄的,我的随便后面会注明参考资料。)

     《设计模式》中是这样说明:定义一个用于创建对象的接口,让子类决定实例化那个类。FactoryMethod使得一个类的实例化延迟到子类。

     1.抽象工厂是一种创建型模式,是为了解决实例化时所带来的问题。

     2.抽象工厂有简单工厂、工厂方法、抽象工厂和反射工厂;

     3.使用抽象工厂模式的条件:
          a) 一个系统不应依赖于产品如何被创建,组合和表达的细节;
          b)有多个产品族,而系统只消费其中一个族中的产品;
          c)同属于一个产品族的产品是在一起使用的;
          d)系统提供一个产品的库,所有产品都是以同样的接口实现。

     4. Abstract Factory模式的几个要点:
          a)如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式。
          b)“系列对象”指的是这项对象之间有相互依赖、或作用的关系。
          c)Abstract Factory模式主要在于应对“新系列”的需求变动。缺点是难以应对“新对象”的需求变动。这一点应该注意,就像前面说的,如果我们现在要在加入其他系列的类,代码的改动会很大。
          d)Abstract Factory模式经常和Factory Method模式共同组合来应对“对象创建”的需求变化。

     5.抽象工厂通用原则:在可能的情况下尽量使用基类的方法
           与简单抽象工厂的区别:
               a)Factory用于创建一种类型的产品,而AbstractFactory用于创建产品族
          抽象工厂的各种角色:
               a).抽象工厂(Abstract Factory).   担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创立对象的工厂类必须实现这个接口,或继承这个类。 
               b).具体工厂(Concrete Factory).   这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。

               c).抽象产品(Abstract Product).  担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。 
               d).具体产品(Concrete Factory).  抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。

     6.反射工厂的优缺点

          使用反射工厂的优点是极大地减少了工厂类的数量、降低了代码的冗余,并且系统更容易扩展,在增加新类型后,不需要修改工厂类。
          使用反射工厂的代价是工厂与产品之间的依赖关系不明显,由于是动态绑定,因此理论上可以用一个工厂完成很多类型的实例化,从而使得代码 不容易理解。另外增大了测试难度,创建是动态完成的,测试用例的编写和测试执行要比传统的工厂困难。

 

     这是我整理出来个人觉得有参考价值的资料,方便大家参考:

     1.简单工厂

     缺点:不能应对“不同系列对象的变化”;

     由浅入深学“工厂模式”(1)

     解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么

     2.工厂方法

     由浅入深学“工厂模式”(2)

     3.抽象工厂

     由浅入深学“工厂模式”(3)

     4.反射工厂

     范型类型工厂模式(这篇写的一般,但是还是抛个砖吧)

     Dot NET设计模式—反射工厂

     5.综合

     工厂模式兄弟姐妹

     

     另外,由于自己整理这篇文章难免会漏掉一些比较好的文章,希望大家跟帖,我将随时更新随笔。 

 

 

参考资料:

     设计模式学习笔记(三)——Abstract Factory抽象工厂模式 

     抽象工厂模式

     FactoryMethod工厂模式 

     Abstract Factory 抽象工厂模式小结 
 

posted on 2008-08-25 23:44  心不蒙尘  阅读(397)  评论(0编辑  收藏  举报