设计模式手册-工厂方法

2011-11-02

概述:                                                                                                       

工厂方法(factory method):工厂方法通过一个抽象类实现了所有对产品的加工操作代码,唯独将产品的构建方法写成抽象方法。继承这个抽象类的具体类只重写其构建方法,这样就实现了对于不同被构建产品复用相同的加工操作逻辑。工厂方法适用于需要在子类中才能决定实例化哪个被操作对象,同时这些被操作对象又复用相同操作逻辑的场合。

类图:                                                                                                                                 

代码示例:                                                                                                  

1.工厂里的产品抽象类

///<summary>
/// 工厂里的产品抽象类
///</summary>
publicabstractclass Product{}

2.具体的产品

///<summary>
/// 具体的产品
///</summary>
publicclass ConcreteProduct : Product{}

3.创建含有工厂方法的抽象业务类

///<summary>
/// 含有工厂方法的抽象业务类
///</summary>
publicabstractclass Creator
{
void FactoryMethod();
}

4.具体的工厂方法实现类

///<summary>
/// 具体的工厂方法实现类
///</summary>
publicclass ConcreteCreator : Creator
{
void FactoryMethod();
}

其他示例:                                                                                                  

步骤很简单,为了防止自己忘记,从博客园里摘抄噬菌体大哥的一个例子,稍微改进一下便于理解

工厂方法模式

 
View Code
///
/// 产品接口
///
publicabstractclass IProduct
{
publicabstractvoid Behavior();
}
///
/// A类型产品
///
class ProductA : IProduct
{
publicoverridevoid Behavior()
{
Console.WriteLine(
"产品A的行为");
}
}
///
/// B类型产品
///
class ProductB : IProduct
{
publicoverridevoid Behavior()
{
Console.WriteLine(
"产品B的行为");
}
}
///
/// 含有工厂方法的抽象业务类
///
publicabstractclass ACreator
{
publicabstract IProduct FactoryMethod();

publicvoid OpreateMethod()
{
IProduct product
= FactoryMethod();

//对product的一系列操作
}
}

///
/// 生产A类型产品的具体业务类
///
publicclass CreatorA : ACreator
{
publicoverride IProduct FactoryMethod()
{
returnnew ProductA();
}
}

///
/// 生产B类型产品的具体业务类
///
publicclass CreatorB : ACreator
{
publicoverride IProduct FactoryMethod()
{
returnnew ProductB();
}
}

 客户端调用:

 ACreator create =new CreatorA();
IProduct product
= create.FactoryMethod();
product.Behavior();

补充TerryLee的例子                                                                                  

原始错误已经更正过来

View Code
namespace DesignPatternLab.FactoryMethodPackage
{
class FactoryMethodSample4
{
}
///<summary>
/// 定义抽象接口
///</summary>
publicabstractclass Log
{
publicabstractvoid Write();
}
///<summary>
/// 具体实现类
///</summary>
publicclass EventLog : Log
{
publicoverridevoid Write()
{
Console.WriteLine(
"EventLog Write Success"); ;
}
}
///<summary>
/// 具体实现类
///</summary>
publicclass FileLog : Log
{
publicoverridevoid Write()
{
Console.WriteLine(
"FileLog Write Success");
}
}
///<summary>
/// 定义抽象方法接口
///</summary>
publicabstractclass LogFactory
{
publicabstract Log Create();
}
///<summary>
/// 具体实现的实例化类
///</summary>
publicclass EventFactory:LogFactory
{
publicoverride Log Create()
{
returnnew EventLog();
}
}
///<summary>
/// 具体实现实例化的类
///</summary>
publicclass FileFactory : LogFactory
{
publicoverride Log Create()
{
returnnew FileLog();
}
}
}
//客户端调用如下
LogFactory factory =new EventFactory();
Log log
= factory.Create();
log.Write();

  

小结:                                                                                                       

工厂模式应用的非常多,希望记住,能熟练应用,最起码面试的时候能写出来

 


作者:robotbird, 分类:关于代码 标签: 设计模式 , 浏览(2806), 评论(1)
上一篇: 设计模式手册-代理模式
下一篇: 从今天开始坚持不刷技术类文章

相关文章

(1)条评论 订阅

  1. ${item.nickname} 币安 说:

    工厂方法通过一个抽象类实现了所有对产品的加工操作代码。

1

发表评论

电子邮件用于回复通知和avatar全球唯一头像 *

*