前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#设计模式——(创建型-抽象工厂设计模式)

C#设计模式——(创建型-抽象工厂设计模式)

原创
作者头像
用户10053120
发布2022-10-08 16:15:10
2810
发布2022-10-08 16:15:10
举报
文章被收录于专栏:C# 设计原则

一、应用场景

分别用简单工厂设计模式和工厂方法设计模式实现:创建不同品牌的键盘。

代码语言:javascript
复制
 #region  简单工厂
        public interface IKeyBoard
        {
            void ShowBrand();
        }
        public class DellKeyBoard : IKeyBoard
        {
            public void ShowBrand()
            {
                Console.WriteLine("我是戴尔键盘"); ;
            }
        }
        public class LenovoKeyBoard : IKeyBoard
        {
            public void ShowBrand()
            {
                Console.WriteLine("我是联想键盘");
            }
        }
        public class HPKeyBoard : IKeyBoard
        {
            public void ShowBrand()
            {
                Console.WriteLine("我是惠普键盘");
            }
        }
        public class KeyBoardFactory
        {
            public static IKeyBoard GetKeyBoard(string brand)
            {
                IKeyBoard kb = null;
                switch (brand)
                {
                    case "Dell":
                        kb = new DellKeyBoard();
                        break;
                    case "Lenovo":
                        kb = new LenovoKeyBoard();
                        break;
                    case "HP":
                        kb = new HPKeyBoard();
                        break;
                    default:
                        break;
                }
                return kb;
            }
        }
         #endregion
代码语言:javascript
复制
        #region 工厂方法
        public interface IKeyBoardFactory
        {
            IKeyBoard GetKeyBoard();
        }
        public class DellBoardFactory : IKeyBoardFactory
        {
            public IKeyBoard GetKeyBoard()
            {
                return new DellKeyBoard();
            }
        }
        public class LenovoBoardFactory : IKeyBoardFactory
        {
            public IKeyBoard GetKeyBoard()
            {
                return new LenovoKeyBoard();
            }
        }
        public class HPBoardFactory : IKeyBoardFactory
        {
            public IKeyBoard GetKeyBoard()
            {
                return new HPKeyBoard();
            }
        }
        #endregion

二、定义

为了减少创建子类工厂的数量,不必给每一个产品分配一个工厂类,可以将产品进行分组,每组中的不同产品由同一个工厂类的不同方法进行创建。

抽象工厂代码如下:

代码语言:javascript
复制
        #region 抽象工厂
        //如果要添加鼠标、显示屏等产品
        public interface IMouse
        {
            void ShowMouseBrand();
        }
        public class DellMouse : IMouse
        {
            public void ShowMouseBrand()
            {
                Console.WriteLine("戴尔鼠标"); ;
            }
        }
        public class HPMouse : IMouse
        {
            public void ShowMouseBrand()
            {
                Console.WriteLine("惠普鼠标"); ;
            }
        }
        public interface AbstractFactory
        {
            IKeyBoard GetKeyBoard();
            IMouse GetMouse();
        }
        public class DellFactory : AbstractFactory
        {
            public IKeyBoard GetKeyBoard()
            {
                return new DellKeyBoard();
            }

            public IMouse GetMouse()
            {
                return new DellMouse();
            }
        }
        public class HPFactory : AbstractFactory
        {
            public IKeyBoard GetKeyBoard()
            {
               return new  HPKeyBoard();
            }

            public IMouse GetMouse()
            {
                return new HPMouse();
            }
        }
        #endregion

三、三种模式的对比

  • 简单工厂:只有一个工厂类,一个产品抽象类,工厂类创建方法依据传入参数并判断选择创建具体的产品对象;
  • 工厂方法:有多个工厂类,一个产品抽象类,一个工厂抽象类,利用多态创建不同的产品对象,避免大量的switch case,实现了细节依赖抽象
  • 抽象工厂:多个工厂类,多个产品抽象类,产品子类分组,同一个工厂实现类创建同组中的不同产品对象,减少了工厂子类的数量。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档