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

    结果:

  • 相关阅读:
    http请求类型简介
    关于PLSQL连接报错:ORA-12154:TNS:无法解析指定的连接标识符
    JDK8的安装与配置
    今天新装tomcat遇到黑窗口(startup.bat)启动乱码问题解决!!!
    一个简单的工厂模式(一个接口,多个实现,通过调用条件的不同,分别去调用符合的实现)
    数组(复习)
    java选择结构、循环结构(复习)
    java常用的数据类型,变量和常量,运算符(复习)
    java输入输出,书写规范,运行原理,跨平台原理(复习)
    JAVA基础入门(JDK、eclipse下载安装)
  • 原文地址:https://www.cnblogs.com/YourDirection/p/14066784.html
Copyright © 2011-2022 走看看