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();
            }
        }
    

    结果:

  • 相关阅读:
    ECS内网穿透
    设置服务器ssh会话时间
    VScode插件
    Linux拷贝U盘文件(命令行)
    打开IDM下载视频时弹出防火墙阻止下载,解决方案
    如何将jmeter.bat命令文件固定到任务栏
    jmeter安装教程
    安装JDK8.0(JDK1.8) & 环境变量配置 & idea中配置java路径
    教你不用任何第三方软件实现任务栏居中
    [Unity优化]gc03:代码优化
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14066784.html
Copyright © 2011-2022 走看看