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

    结果:

  • 相关阅读:
    ubuntu /etc/rc.local 不执行
    HTML中设置页面内嵌跳转
    JS使用AudioContext播放音乐
    Unity实现摄像机以某个物体为中心旋转
    Unity中实现通过鼠标对物体进行旋转平移缩放
    解决Windows上无法创建以点开头的文件问题
    解决FBX模型导入Unity后没有贴图的问题
    nedb中使用update更新数据的原理
    Electron 渲染进程中解决require is not defined的问题
    Base64转Blob的方式
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14066784.html
Copyright © 2011-2022 走看看