zoukankan      html  css  js  c++  java
  • 设计模式学习笔记工厂方法

    概述:                                                                                                       

    工厂方法(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();

      

    小结:                                                                                                       

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


  • 相关阅读:
    使用C# 实现串口拨号器的SIM卡通信
    物联网协议Coap协议介绍
    C#实现简单的串口通信
    C#硬件访问(摄像头、麦克风)
    请问在电脑里PNP是什么意思啊?
    原码,反码,补码,及Java中数字表示方法
    3_PHP表达式_5_数据类型转换_类型强制转换
    3_PHP表达式_4_PHP运算符
    3_PHP表达式_5_数据类型转换_类型自动转换
    3_PHP表达式_3_有关变量或常量状态的函数
  • 原文地址:https://www.cnblogs.com/jqbird/p/2144085.html
Copyright © 2011-2022 走看看