您的位置:首页 > 其它

[创建型模式系列]simple factory & factory method 简单工厂类和工厂方法类的概念及区别

2008-05-13 14:25 746 查看
1.simple factory pattern简单工厂类模式

simple factory is that all products are produced by the respectice concrete method from simple factory.

简单工厂类就是所有其产品都是由简单工厂的具体方法来生产的。

还是以abstract类介绍的桌子生产过程为例。有关桌子生产的相关描述,请参考/article/6978198.html

在简单工厂模式下,生产桌面(不管方形桌面还是圆形桌面)和桌腿(不管大腿还是mini腿)都在一起。

我们有一个简单工厂类如下:

public class SimpeFactory

{

public BigLeg Create_BigLeg()

{

return new BigLeg();

}

public MiniLeg Create_MiniLeg()

{

return new Create_MiniLeg();

}

public Rectang_Desktop Create_Rectangle_Desktop

{

return new Rectangle_Desktop();

}

public Circle_Desktop Create_Circle_Desktop

{

return new Circle_Desktop();

}

}

public class BigLeg

{}

public class MiniLeg

{}

public class Rectangle_Desktop

{}

public class Circle_Desktop

{}

//说明:当然,产品也可以继承于抽象产品类。在各自的产品中实现产品。

此时,客户端可以根据命令,生产相应的产品,但是产品间是毫无关联的。例如

SimpeFactory factory=new SimpleFactory();

Rectangle_Desktop desktop=factory.Create_Rectangle_Desktop();

MiniLeg leg=factory.Create_Mini_Leg();

也就是说,有可能我们生产出的是方形桌面和mini腿,或者圆形桌面和大号桌腿。试想如果将这两种产品组装在一起,会是什么样的怪胎!


这就是简单工厂模式

2.Factory method pattern工厂方法模式

Factory method定义一个用于创建对象的接口,让子类决定实例化哪一个类,这种方式叫做lazy initiation.也就是说,对于要生产那一种具体产品,都延迟到相应具体的工厂来创建。

public abstract class Creator

{

public abstract Leg Create_BigLeg();

public abstract Leg Create_MiniLeg();

public abstract Desktop Create_Rentangle_Desktop();

public abstract Desktop Create_Circle_Desktop();

}

public class TableCreator:Creator

{

public Leg Create_BigLeg()

{

return new BigLeg();

}

......

}

然后在客户端,我们可以这样调用

Creator factory=new TableCreator();

其存在的问题仍然是创建的产品之间毫无关联。

这时,为了创建一系列相互关联的产品,我们可以创建一系列相互关联或依赖的接口或抽象类,即抽象工厂了。具体可见文章/article/6978198.html 。这样,我们就不可能生产出方形桌面和mini桌腿的产品了。只需要给某个工厂下达命令,该工厂就会生产出相应的产品。至于如何生产的过程,都被encapsulate到了具体工厂里面了(比如mini桌生产工厂,办公桌生产工厂),很显然,每个具体工厂不可能生产出方形桌面和mini桌腿这样组合的怪产品了(否则厂长都下岗了 :))。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: