LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

了解C#中的工厂方法设计模式实现与示例

admin
2024年7月18日 11:57 本文热度 1011

引言

工厂设计模式是一种常用于实例化对象模式,通过工厂的方法返回需要的对象实例。工厂设计模式被分为简单工厂、工厂方法、抽象工厂三种设计模式。在前篇中介绍了简单工厂设计模式,其中当需要增加一种新类型对象时,我们除了需增加一个新的对象类,还需要修改工厂类的代码,这就使整个设计在一定程度上违反了开闭原则。本文介绍工厂方法设计模式。

工厂方法设计模式

工厂方法设计模式(Factory Method Pattern)它属于创建型模式,与简单工厂设计模式非常相似,工厂方法设计模式,对工厂类进一步抽象,将工厂提取成一个接口或抽象类。根据不同的需求返回相应的对象实例。

1、使用好处

  • 封装对象逻辑,符合开闭原则;

  • 运行时动态创建对象;

  • 降耦合度,提高可维护性;

2、构成

工厂方法设计模式主要包含以下几个角色组成:

  • 抽象产品类:创建具体对象的父类,是对象所具有的公共接口。

  • 具体产品类:是具体对象实现的逻辑,继承抽象产品类

  • 抽象工厂类:实现抽象工厂中的抽象方法,完成具体产品的创建

  • 具体工厂类:实现了抽象产品所定义的接口。

  • 调用端: 实现调用工厂类,实现业务功能。

结构图示

实现

在C#中,工厂方法设计模式(Factory Method)的实现涉及几个关键步骤,以下是实现示例描述。示例模拟调用平台快递面单打印

1、定义快递面单抽象基类:分析对象,抽取共性的方法、属性等。

namespace Fountain.WinConsole.DesignPatternFactoryMethod{    /// <summary>    /// 快递面单    /// </summary>    public abstract class ExpressWaybill    {        /// <summary>        /// 打印        /// </summary>        /// <param name="jsonContent">打印数据</param>        public abstract void Print(string jsonContent);    }}

2、定义快递面单具体子类:实现自己的方法。

using System;
namespace Fountain.WinConsole.DesignPatternFactoryMethod{    /// <summary>    /// 菜鸟快递面单    /// </summary>    public class CaiNiao: ExpressWaybill    {        /// <summary>        /// 打印        /// </summary>        /// <param name="jsonContent">打印数据</param>        public override void Print(string jsonContent)        {            Console.WriteLine("往菜鸟打印组件发送请求:" + jsonContent);        }    }}
using System;
namespace Fountain.WinConsole.DesignPatternFactoryMethod{    /// <summary>    /// 抖音快递面单    /// </summary>    public class Douyin: ExpressWaybill    {        /// <summary>        /// 打印        /// </summary>        /// <param name="jsonContent">打印数据</param>        public override void Print(string jsonContent)        {            Console.WriteLine("往抖音打印组件发送请求:" + jsonContent);        }    }}
using System;
namespace Fountain.WinConsole.DesignPatternFactoryMethod{    /// <summary>    /// 视频号快递面单    /// </summary>    public class ShiPinHao: ExpressWaybill    {        /// <summary>        /// 打印        /// </summary>        /// <param name="jsonContent">打印数据</param>        public override void Print(string jsonContent)        {            Console.WriteLine("往视频号打印组件发送请求:" + jsonContent);        }    }}

3、定义创建快递面单的抽象工厂:分析对象,抽取共性的方法、属性等。

namespace Fountain.WinConsole.DesignPatternFactoryMethod{    public abstract class ExpressWaybillCreator    {        protected abstract ExpressWaybill MakeExpressWaybill();        /// <summary>        ///         /// </summary>        /// <returns></returns>        public ExpressWaybill CreateExpressWaybill()        {            return this.MakeExpressWaybill();        }    }}

4、定义创建快递面单具体工厂:分析对象,抽取共性的方法、属性等。

namespace Fountain.WinConsole.DesignPatternFactoryMethod{    public class CaiNiaoCreator:ExpressWaybillCreator    {        protected override ExpressWaybill MakeExpressWaybill()        {            ExpressWaybill expressWaybill = new CaiNiao();            return expressWaybill;        }    }}
namespace Fountain.WinConsole.DesignPatternFactoryMethod{    public class DouyinCreator:ExpressWaybillCreator    {        protected override ExpressWaybill MakeExpressWaybill()        {            ExpressWaybill expressWaybill = new Douyin();            return expressWaybill;        }    }}
namespace Fountain.WinConsole.DesignPatternFactoryMethod{    public class ShiPinHaoCreator:ExpressWaybillCreator    {        protected override ExpressWaybill MakeExpressWaybill()        {            ExpressWaybill expressWaybill = new ShiPinHao();            return expressWaybill;        }    }}

5、实现模式调用:

using System;
namespace Fountain.WinConsole.DesignPatternFactoryMethod{    internal class Program    {        static void Main(string[] args)        {            ExpressWaybill expressWaybill;            Console.WriteLine("输入快递面单类型!CaiNaio、ShiPinHao 或 Douyin.");            string userInput = Console.ReadLine();            switch (userInput)            {                case "CaiNaio":                expressWaybill = new  CaiNiaoCreator().CreateExpressWaybill();                    break;                case "ShiPinHao":                expressWaybill = new ShiPinHaoCreator().CreateExpressWaybill();                    break;                case "Douyin":                expressWaybill = new DouyinCreator().CreateExpressWaybill();                    break;                default:                expressWaybill = null;                    break;            }            if (expressWaybill != null)            {                expressWaybill.Print(userInput);            }            Console.Read();        }    }}

小结

以上是工厂方法设计模式的相关内容及在C#中模拟实现的示例。


该文章在 2024/7/18 11:59:45 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved