浏览 7574 次
锁定老帖子 主题:深入浅出设计模式之工厂模式
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-01-09
工厂模式 工厂模式定义:提供创建一组对象的标准接口。 如何使用? 工厂模式应该是任何一个系统中使用最多的设计模式之一,为什么说工厂模式最为常用,原因很简单,因为工厂模式的作用就是替代我们的代码中出现new关键字对一个对象的创建,工厂模式就是用来创建对象。 一般情况下,我们创建一个对象,使用如下代码: Node node = new Node(); 如果我们需要传入构造参数,创建的代码如下: Node Node = new Node(参数); 但是,在很多情况下,我们创建一个对象都不是简单的属于参数就可以完成的,比如:查询数据,或者通过配置文件获取一些信息等,这就导致了一个类的构造函数中需要实现较多的功能,这样不利用代码优雅设计,代码极为难看。 为什么说,这种情况下代码极为难看。很多人都知道,在程序设计中,Java提倡面向对象原则,而面向对象原则有提倡分派和封装。尽量将较长的代码段分派到各个单一职责的方法或者接口中去实现,这一点也是Java中提倡的单一职责原则。这样做降低了代码修改的难度,如果需要修改代码,只需要修改一处,不会导致牵一发而动全身。 下面使用一些例子来说明工厂方法的使用: 首先建立创建Node的工厂类: public class NodeFactory { public Node create(int type) { if (type == 1) { return new NodeA(); } else if (type == 2) { return new NodeB(); } else { throw new RuntimeException("Error Type: " + type); } } } 这样来初始化Node对象的直接好处就是,在我们需要初始化Node归到一个地方来实现,这样就可以方便的修改Node对象初始化的过程。同样也减少了出现错误的几率,必进事情越少做,越不容易犯错误。 工厂模式分为两种:工厂方法模式和抽象工厂模式 在上边的例子中,我们实现的是工厂方法模式,如果创建的对象复杂度升高,这个时候就需要使用抽象工厂模式。具体来看一下代码: 这里假设,Node有连个实现类NodeA和NodeB,同样Node2也有两个实现类Node2A和Node2B,那么我们将上列中的Factory变成抽象工厂类实现,实现抽象工厂模式 引用 public abstract class AbstractFactory { public abstract Node createNode(); public abstract Node2 createNode2(); class NodeAFactory extends AbstractFactory { @Override public Node createNode() { return new NodeA(); } @Override public Node2 createNode2() { return new Node2B(); } } class NodeBFactory extends AbstractFactory { @Override public Node createNode() { return new NodeB(); } @Override public Node2 createNode2() { return new Node2B(); } } } 从上面看,我们实现了一个抽象工厂,分别产生NodeA和Node2A的工厂,和NodeB和Node2B的工厂。 自此,我们已经详细介绍了工厂模式的使用,这里的例子只是简单的实现。在实际的生成环境的系统中,工厂模式往往还可以结合其他模式一起使用,比如享元模式。这些实现我们可以在后续的讲解中提及到。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-01-11
抽象工厂就抽象工厂,标题干嘛叫工厂模式,他们有区别的
|
|
返回顶楼 | |
发表时间:2012-01-11
工厂方法模式
|
|
返回顶楼 | |
发表时间:2012-01-12
工厂模式主要是用来解偶的,达到使用对象的地方依赖的是某个接口而不是具体的实现,我觉得这才是工厂模式最重要的作用,工厂模式及抽象工厂模式更进一步就到了ioc了。
楼主说的“工厂模式”是用来解决“复杂的构造函数”的理由个人觉得不正确,如果构造一个对象本身很复杂,不管采用什么样的模式,它依然还会是复杂的 |
|
返回顶楼 | |
发表时间:2012-01-12
madbluesky 写道 工厂模式主要是用来解偶的,达到使用对象的地方依赖的是某个接口而不是具体的实现,我觉得这才是工厂模式最重要的作用,工厂模式及抽象工厂模式更进一步就到了ioc了。
楼主说的“工厂模式”是用来解决“复杂的构造函数”的理由个人觉得不正确,如果构造一个对象本身很复杂,不管采用什么样的模式,它依然还会是复杂的 工厂模式解耦的作用这个毋庸置疑,我只是强调一下,在复杂构造函数的情况下,也可以考虑使用工厂方法来实现,这个是个人的一个看法,不代表一定是工厂模式的主要作用。另外,如果一个对象构造复杂,还可以考虑建造者模式,这些具体的 应用就是仁者见仁智者见智了。 |
|
返回顶楼 | |
发表时间:2012-01-12
freish 写道 抽象工厂就抽象工厂,标题干嘛叫工厂模式,他们有区别的
写这篇文章的时候,是把抽象工厂模式和工厂方法模式都归结为工厂模式来讲解。 |
|
返回顶楼 | |