[创建型模式系列]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桌腿这样组合的怪产品了(否则厂长都下岗了 :))。
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桌腿这样组合的怪产品了(否则厂长都下岗了 :))。
相关文章推荐
- iOS 设计模式之简单工厂方法模式(SimpleFactoryMethod)
- Java设计模式----------简单工厂类+工厂方法(FactoryMethod)
- 创建型模式-简单工厂方法(simple_factory)
- 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory
- 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory
- 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory
- 『创建型』简单工厂SimpleFactory、工厂方法FactoryMethod、抽象工厂AbstractFactory
- 设计模式笔记-创建型模式之三--工厂方法:Factory Method
- 【设计模式】创建型模式之工厂方法Factory Method
- C#面向对象设计模式第五讲:Factory Method 工厂方法(创建型模式)
- Java语言 封装创建 简单工厂方法(Simple Factory method)
- 1.3 Factory Method(工厂方法) -- 对象创建型模式
- 创建型模式(前引)简单工厂模式Simple Factory
- java设计模式之创建型模式-FactoryMethod ( 工厂方法 )
- 创建型模式-FactoryMethod ( 工厂方法 )
- 5. Factory Method 工厂方法(创建型模式)
- 设计模式学习之工厂方法(Factory Method,创建型模式)(2)
- 创建型模式: Factory Method(工厂方法)
- 设计模式-创建型模式:工厂方法FactoryMethod
- 简单工厂模式 (Simple Factory Pattern) / 静态工厂方法(Static Factory Method)模式