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

    结果:

  • 相关阅读:
    我是这样在Google paly上赚美刀的
    休闲英语:超经典实用的英文短信缩写
    休闲英语:揭秘7招最有效的拍马屁技巧
    laravel5数据库配置及其注意事项
    帮助函数
    Laravel报错Call to undefined function Illuminate\Encryption\openssl_cipher_iv_length()
    NetBeans 时事通讯(刊号 # 67 Aug 04, 2009)
    JavaEE 6 将包括 JSR330 和 JSR299
    苯事两则
    NetBeans 时事通讯(刊号 # 66 Jul 30, 2009)
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14066784.html
Copyright © 2011-2022 走看看