zoukankan      html  css  js  c++  java
  • C# 设计模式(4)抽象工厂模式

    抽象工厂模式

    1. 倾斜的可扩展性设计:产品簇扩展方便,工厂职责不能扩展

    代码实现:

    三国服务:

    namespace AbstractFactory.SanGuoService
    {
        public interface ILord
        {
            void ShowLord();
        }
        public class LordWei:ILord
        {
            public void ShowLord()
            {
                Console.WriteLine($"{this.GetType().Name} is 曹操");
            }
        }
        public class LordShu:ILord
        {
            public void ShowLord()
            {
                Console.WriteLine($"{this.GetType().Name} is 刘备");
            }
        }
        public class LordWu:ILord
        {
            public void ShowLord()
            {
                Console.WriteLine($"{this.GetType().Name} is 孙权");
            }
        }
        public interface IGeneral
        {
            void ShowGenerals();
        }
        public class GeneralWei:IGeneral
        {
            public void ShowGenerals()
            {
                Console.WriteLine($"{this.GetType().Name} is 许褚 典韦 夏侯渊 张辽 徐晃");
            }
        }
        public class GeneralShu:IGeneral
        {
            public void ShowGenerals()
            {
                Console.WriteLine($"{this.GetType().Name} is 关羽 张飞 赵云 黄忠 马超");
            }
        }
        public class GeneralWu:IGeneral
        {
            public void ShowGenerals()
            {
                Console.WriteLine($"{this.GetType().Name} is 黄盖 甘宁 太史慈 韩当 凌统");
            }
        }
    }
    

    抽象工厂:

    namespace AbstractFactoryPattern.AbstractFactory
    {
        public abstract class AbstractSanGuoFactory
        {
          public abstract ILord GetLord();
          public abstract IGeneral GetGenerals();
        }
        public  class FactoryWei:AbstractSanGuoFactory
        {
            public override ILord GetLord()
            {
                return new LordWei();
            }
    
            public override IGeneral GetGenerals()
            {
                return new GeneralWei();
            }
        }
        public  class FactoryShu:AbstractSanGuoFactory
        {
            public override ILord GetLord()
            {
                return new LordShu();
            }
    
            public override IGeneral GetGenerals()
            {
                return new GeneralShu();
            }
        }
        public  class FactoryWu:AbstractSanGuoFactory
        {
            public override ILord GetLord()
            {
                return new LordWu();
            }
    
            public override IGeneral GetGenerals()
            {
                return new GeneralWu();
            }
        }
    }
    

    代码调用:

        class Program
        {
            static void Main(string[] args)
            {
                AbstractSanGuoFactory abstractShuFactory = new FactoryShu();
                abstractShuFactory.GetLord().ShowLord();
                abstractShuFactory.GetGenerals().ShowGenerals();
    
                AbstractSanGuoFactory abstractWeiFactory = new FactoryWei();
                abstractWeiFactory.GetLord().ShowLord();
                abstractWeiFactory.GetGenerals().ShowGenerals();
    
                AbstractSanGuoFactory abstractWuFactory = new FactoryWu();
                abstractWuFactory.GetLord().ShowLord();
                abstractWuFactory.GetGenerals().ShowGenerals();
            }
        }
    

    结果:

  • 相关阅读:
    Git本地仓库push至GitHub远程仓库每次输入账户密码问题解决(亲测可行)
    Laravel5.5+ 区分前后端用户登录
    word 中Sentences、Paragraph等含义和用法
    Word转图片word
    Word文档编号工具,Word标题,图、表手动编号工具
    Word电子扫描器 Word文档转换为图片Pdf,Word文档扫描成Pdf工具
    如何用vba给一个word表格的最后插入一行
    PPT电子扫描仪 ppt转换为图片Pdf工具
    Word文档只读加密工具
    在c#应用程序中使用IrisSkin2.dll美化界面
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14066784.html
Copyright © 2011-2022 走看看