C#编程模式之抽象工厂模式

本文介绍了抽象工厂模式,它与工厂方法模式的区别,以及如何通过实现不同的抽象工厂接口创建一系列相关对象。作者通过实例展示了在C#中如何运用这些模式,并提供了示例代码和切换场景。
摘要由CSDN通过智能技术生成

        模式介绍:今天我们介绍第三中编程模式,抽象工厂模式。顾名思义还是和工厂相关,同时也与工厂方法模式有着千丝万缕的联系,但是其本质又与工厂方法模式大相径庭。这里先来简单介绍下二者的区别,以免混淆。文章末尾有源码链接。

        抽象工厂模式:提供一个接口,用于创建一系列相关的对象,而无需指定具体的类。它适用于需要一次性创建多个相关对象,以形成一个族群。抽象工厂模式通常由抽象工厂、具体工厂、抽象产品和具体产品组成。通过切换具体工厂实现类,可以改变整个族群。

        工厂方法模式:它将对象的创建延迟到子类中进行。由子类决定具体实例化哪个类。通过切换具体工厂的子类,来改变单个实例(也可说产品)。

        以上就是二者的区别,总的来说,抽象工厂模式更注重一些列相关对象的创建。接下来就安排示例代码👌。

        1、创建抽象工厂接口。

    /// <summary>
    /// 抽象职业工厂接口
    /// </summary>
    public interface IWorkAstFac
    {
        /// <summary>
        /// 创建职业内容
        /// </summary>
        /// <returns></returns>
        string CreateWorkContent();

        /// <summary>
        /// 创建每天的工作量
        /// </summary>
        /// <returns></returns>
        int CreateWorkHours();
    }

        2、创建实现抽象接口的具体的类。

    /// <summary>
    /// 实现了 IWorkAstFac 接口的 CPoliceAF 类
    /// </summary>
    public class CPoliceAF : IWorkAstFac
    {
        public string CreateWorkContent()
        {
            return PoliceWorkContent();
        }

        public int CreateWorkHours()
        {
            return PoliceWorkHours();
        }

        private string PoliceWorkContent()
        {
            return string.Format("维护社会治安");
        }

        private int PoliceWorkHours()
        {
            return 8;
        }
    }
    /// <summary>
    /// 实现了 IWorkAstFac 接口的 CTeacherAF 类
    /// </summary>
    public class CTeacherAF : IWorkAstFac
    {
        public string CreateWorkContent()
        {
            return TeacherWorkContent();
        }

        public int CreateWorkHours()
        {
            return TeacherWorkHours();
        }

        private string TeacherWorkContent()
        {
            return string.Format("教书育人");
        }

        private int TeacherWorkHours()
        {
            return 12;
        }
    }

        3、使用抽象工厂来创建相关对象。

    /// <summary>
    /// 使用抽象工厂来创建职业信息
    /// </summary>
    public class DataTransfer
    {
        private IWorkAstFac _workAstFac;
        public DataTransfer(IWorkAstFac iWorkAstFac)
        {
            _workAstFac = iWorkAstFac;
        }

        public string GetWorkInfo()
        {
            return string.Format("我的职业内容是:" + _workAstFac.CreateWorkContent() + " ; 我每天工作 " + _workAstFac.CreateWorkHours() + " 个小时");
        }
    }

        4、客户端调用。

        /// <summary>
        /// 抽象工厂测试
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_astFac_Click(object sender, EventArgs e)
        {
            tbx_astFac.Text = string.Empty;
            // 假设我们想使用CPoliceAF信息
            IWorkAstFac iWorkAstFac = new CPoliceAF();
            DataTransfer dataTransfer = new DataTransfer(iWorkAstFac);
            tbx_astFac.Text = dataTransfer.GetWorkInfo();


            // 如果我们想切换到CPoliceAF的信息,只需更改工厂实现
            iWorkAstFac = new CTeacherAF();
            dataTransfer = new DataTransfer(iWorkAstFac);
            tbx_astFac.Text += "\r\n" + dataTransfer.GetWorkInfo();
        }

        这里还是使用winform按钮事件进行的调用,各位伙伴自行修改调用方法即可。

        以上就是我所了解的抽象工厂的相关内容,希望能给各位一定的帮助,也欢迎各位大神指导错误😃

        资源链接:C#编程模式之工厂方法模式+抽象工厂模式

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值