Factory模式

原创 2005年05月07日 16:12:00

java中,创建对象通常用构造函数来完成。如下:

public class Sample {

    public Sample (){

       //一些操作

    }

}

 

然后当你创建对象的时候,你会这样写:

Sample a = new Sample();

 

这是java的常识。好了,现在假设你有一个父类Sample,子类SampleASampleB。你要在创建对象的时候,能根据不同条件返回不同的子类。你很自然的会这样写:

public class Sample {

    public Sample (String flag){

        if(flag==”A”)

           return new SampleA;

        if(flag==”B”)

           return new SampleB;

    }

}

 

假设现在需求变化了,你可能要根据条件返回10个子类。对于聪明而勤奋的你来说,这不是什么问题:

public class Sample {

    public Sample (String flag){

        if(flag==”A”)

           return new SampleA;

        if(flag==”B”)

           return new SampleB;

        if(flag==”C”)

           return new SampleC;

       //省略其他7

    }

}

 

虽然你有点头晕,不过毕竟完成老板的任务了。但你刚松了一口气,老板慢条斯理的对你说:明天我们的需求再次变化,我们需要返回一千个子类。你马上晕倒了……

 

为了完成老板的任务,你回家通宵达旦的翻资料。运气非常好的你——可能好到可以和AC米兰相比——注意到了在老式的jdbc代码里有这么一段:

class.forName(string driverName)……

没错,这是java的动态装载类机制。于是聪明的你马上动脑筋想到,是不是可以根据子类的类名来装载这个类,然后返回呢?没错,就这样做!

 

于是这个类就可以修改为:

public class Sample {

    public Sample (String className){

        return  Class.forName(className).newInstance();

    }

}

 

也就是说,如果你要返回一个SampleA,你只需传入这个参数:

”com.diegoyun.SampleA”

那么它就会返回一个对象,然后你在代码里把它转换成SampleA就可以了。

 

当然,你会意识到开始的思考可能有些欠缺。比如把Sample定义为一个接口,然后返回接口可能更好些。但不管怎样,仅仅几行代码,你就可以完成老板的任务,而不用写1000个子类的返回语句了。

 

之后你会在许多论坛看到这套解决方法,并且有个很学究的名字:

Factory模式

 

其实你内心知道,知道这个模式的名字没什么重要,重要的是:什么情况下可以使用这个模式?你会去查查字典:Factory(工厂),顾名思义,是制造大量相似产品的实体。注意这里的两个关键词:大量,和相似。当然你也知道了,在上述的情况下就可以使用。

 

不管怎样,你起码会使用Factory模式了。值得沾沾自喜一番。

factory设计模式源码

  • 2017年01月16日 15:30
  • 853KB
  • 下载

工厂模式(Factory Pattern)和java反射机制优化思考

GOF的工厂模式是最基础的一种创建型设计模式,其适用于创建同一接口的不同实现子类, 其优点是:将使使用者更加方便使用,而不关心具体的创建逻辑 缺点是:每增加一个接口的子类,必须修改工程类的相关逻辑(后...

The Factory Pattern(工厂模式)ppt

  • 2009年04月19日 18:58
  • 359KB
  • 下载

Abstract Factory(抽象工厂模式)

Abstract Factory模式的意图是:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 具体到我们迷宫的例子就是: 如果传递一个对象给CreateMaze作参数来创建房间、...

Factory Method设计模式

  • 2013年07月25日 16:11
  • 24KB
  • 下载

在 Java 中应用设计模式 - Factory Method

基本概念 FactoryMethod是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Factory模式
举报原因:
原因补充:

(最多只允许输入30个字)