设计模式学习笔记-工厂方法

概述:                                                                                                       

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

类图:                                                                                                                                 

代码示例:                                                                                                  

1.工厂里的产品抽象类

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

2.具体的产品

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

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

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

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

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

其他示例:                                                                                                  

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

工厂方法模式

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

public void OpreateMethod()
{
IProduct product
= FactoryMethod();

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

///
/// 生产A类型产品的具体业务类
///
public class CreatorA : ACreator
{
public override IProduct FactoryMethod()
{
return new ProductA();
}
}

///
/// 生产B类型产品的具体业务类
///
public class CreatorB : ACreator
{
public override IProduct FactoryMethod()
{
return new ProductB();
}
}

 客户端调用:

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

补充TerryLee的例子                                                                                  

原始错误已经更正过来

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

  

小结:                                                                                                       

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


posted @ 2011-08-18 10:31  叶鹏  阅读(1553)  评论(0编辑  收藏  举报