JDK中的设计模式之工厂方法

来源:互联网 发布:python split 编辑:程序博客网 时间:2024/05/27 09:47

一、工厂方法模式简介:


     工厂方法模式的意图是定义一个创建产品对象的工厂接口,让子类决定实例化哪一个类,工厂方法模式使一个类的实例化延迟到其子类。


   工厂方法模式的类图如下:




      基本上来说,FacotryMethod模式和AbstractFactory模式所作的事情是一样的,都是用来创建与具体程序代码无关的对象,只是面对的对象层次不一样,AbstractFactory创建一系列的对象组,这些对象彼此相关。而FactoryMethod往往只是创建单个的对象。


    在这里,我想强调一下面向对象设计的一个重要思想:针对接口编程,而不是针对具体的实现编程(Code to an interface rather than to animplementation),这个思想可以说是设计模式的基石之一。针对接口编程的好处有很多,通过接口来定义对象的抽象功能,方便实现多态和继承;通过接口来指定对象调用之间的契约,有助于协调对象之间的关系;通过接口来划分对象的职责,有助于寻找对象,等等。AbstractFactory和FactoryMethod,还有其他的一些创建型的设计模式,都是为了实现这个目的而设计出来的。它们创建一个个符合接口规范的对象/对象组,使得用同一个Factory创建出来的对象/对象组可以相互替换。这种可替换性就称为多态,是面向对象的核心思想之一。所以,请记住这一点:面向接口编程而非实现。

 

二、jdk中的工厂方法模式


      工厂方法是一个很常用的方法,在jdk中有很多地方用到了工厂模式,比如说Object类的toString方法。Object仅仅定义了返回String,由Object的子类来决定如何生成这个字符串,甚至可以生成字符串的子类(如果字符串不是final类的话)。

三 、关于工厂方法的思考


     关于工厂方法,我想说的不多,但是在这里,我想说一下我写这三篇博客之后的感受。

    先说一下我自己的情况吧,我使用java一年多,依然是一个在校学生,设计模式以前也在课上学过,但是老师布置的作业是完全脱离实际,实现一个模式完全可以照着书上的代码敲,所以我一直感觉很虚。我之所以写这些文章是想通过jdk的源码,看看大师是怎样实现那些经典设计模式的(一开始想分析spring代码的,可惜spring我不是很熟)。这是我写的第三篇博客,写到这里,我发现,在实际使用设计模式时并不会完全按照课本的类层次设计,而会根据具体问题具体分析,有很多设计模式使用实例的类图和书上是有很大差距的,但是它还是用到了该设计模式的思想(有的时候我觉得不同或许是因为它被很多别的方法“淹没”了吧!)。这就是我现在的感觉:不应该迷信设计模式,最起码不应该迷信任何一本书,即使他很经典!

     对了,我写这些博客参考的模式分类来自:http://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns
     
原创粉丝点击