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

概述:                                                                                                       

工厂方法(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 @   叶鹏  阅读(1562)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示