基于C#的设计模式学习之抽象工厂模式

在工厂模式中,产品和工厂是一一对应的,当产品较多时,这使得代码的复杂且冗余,抽象工厂在类内部对同一个产品族的产品进行共同管理,这样可以不必引入多个新的类进行管理。

示例如下:

 


namespace Designmode.AbstractFactory
{
    /// <summary>
    /// 手机的抽象类
    /// </summary>
    public interface IPhone
    {
        /// <summary>
        /// 手机发信息
        /// </summary>
       void SendMessage();
    }
}


namespace Designmode.AbstractFactory
{
    /// <summary>
    /// 小米手机具体实现类
    /// </summary>
    public class XiaoMiPhone : IPhone
    {
        /// <summary>
        /// 产品A的方法实现
        /// </summary>
        public void SendMessage()
        {
            Console.WriteLine($"XiaoMi Send Message.");
        }
    }
}

namespace Designmode.AbstractFactory
{
    /// <summary>
    /// 华为手机具体实现类
    /// </summary>
    public class HuaWeiPhone : IPhone
    {
        /// <summary>
        /// 产品B的方法实现
        /// </summary>
        public void SendMessage()
        {
            Console.WriteLine($"HuaWei Send Message.");
        }
    }
}

namespace Designmode.AbstractFactory
{
    /// <summary>
    /// 笔记本抽象类
    /// </summary>
    public interface INoteBook
    {
        /// <summary>
        /// 笔记本启动
        /// </summary>
        void StartUp();
    }
}


namespace Designmode.AbstractFactory
{
    /// <summary>
    /// 小米笔记本具体实现类
    /// </summary>
    public class XiaoMiNoteBook : INoteBook
    {
        /// <summary>
        /// 笔记本开机
        /// </summary>
        public void StartUp()
        {
            Console.WriteLine($"XiaoMi 笔记本开机.");
        }
    }
}

namespace Designmode.AbstractFactory
{
    /// <summary>
    /// 华为笔记本具体实现类
    /// </summary>
    public class HuaWeiNoteBook : INoteBook
    {
        /// <summary>
        /// 笔记本开机
        /// </summary>
        public void StartUp()
        {
            Console.WriteLine($"HuaWei 笔记本开机.");
        }
    }
}


namespace Designmode.AbstractFactory
{
    /// <summary>
    /// 工厂抽象类
    /// </summary>
    public interface IFactory
    {
        /// <summary>
        /// 工厂类生产手机
        /// </summary>
        /// <returns></returns>
        IPhone ProductPhone();
        /// <summary>
        /// 工厂类生产笔记本电脑
        /// </summary>
        /// <returns></returns>
        INoteBook ProductNoteBook();
    }
}

namespace Designmode.AbstractFactory
{
    /// <summary>
    /// HuaWei工厂
    /// </summary>
    public class HuaWeiFactory : IFactory
    {
        /// <summary>
        /// 生产手机
        /// </summary>
        /// <returns>返回华为手机</returns>
        public IPhone ProductPhone()
        {
            return new HuaWeiPhone();
        }
        /// <summary>
        /// 生产笔记本
        /// </summary>
        /// <returns>返回华为笔记本</returns>
        public INoteBook ProductNoteBook()
        {
            return new HuaWeiNoteBook();
        }


    }
}

namespace Designmode.AbstractFactory
{
    /// <summary>
    /// xiaomi工厂
    /// </summary>
    public class XiaoMiFactory : IFactory
    {
        /// <summary>
        /// 生产手机
        /// </summary>
        /// <returns>返回华为手机</returns>
        public IPhone ProductPhone()
        {
            return new XiaoMiPhone();
        }
        /// <summary>
        /// 生产笔记本
        /// </summary>
        /// <returns>返回华为笔记本</returns>
        public INoteBook ProductNoteBook()
        {
            return new XiaoMiNoteBook();
        }


    }

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Designmode.AbstractFactory;

namespace Designmode
{
    class Program
    {
        static void Main(string[] args)
        {

            #endregion
            #region 抽象工厂模式
            IFactory factory = null;
            IPhone phone = null;
            INoteBook noteBook = null;
            //小米工厂
            factory = new XiaoMiFactory();
            phone = factory.ProductPhone();
            phone.SendMessage();
            noteBook = factory.ProductNoteBook();
            noteBook.StartUp();
            //华为工厂
            factory = new HuaWeiFactory();
            phone = factory.ProductPhone();
            phone.SendMessage();
            noteBook = factory.ProductNoteBook();
            noteBook.StartUp();
            #endregion
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值