zoukankan      html  css  js  c++  java
  • 反射使抽象工厂模式的面向对象更上一层楼(知识点:依赖注入,反射,多态性,操作XML文件等)

    namespace test
    {
        #region 使用反射实现的抽象工厂
        internal static class ReflectionFactory
        {
            private static String _windowType;
            private static String _styleType;
            static ReflectionFactory()
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(@"f:/test.xml");
                XmlNode xmlNode = xmlDoc.ChildNodes[0];
                _windowType = xmlNode.ChildNodes[0].ChildNodes[0].Value;
                _styleType = xmlNode.ChildNodes[1].ChildNodes[0].Value;
            }
     
            public static IWindow MakeWindow()
            {
                return Assembly.Load("test").CreateInstance("test." + _windowType) as IWindow;
            }
     
            public static IStyle MakeStyle()
            {
                return Assembly.Load("test").CreateInstance("test." + _styleType) as IStyle;
            }
     
        }
        #endregion
     
        #region 操作接口规范
        internal interface IStyle
        {
            String ShowInfo();
        }
     
        internal interface IWindow
        {
            String ShowInfo();
        }
     
        #endregion
     
        #region 页面风格
        internal sealed class WindowsStyle : IStyle
        {
            public String Description { get; private set; }
     
            public WindowsStyle()
            {
                this.Description = "Windows风格按钮";
            }
     
            public String ShowInfo()
            {
                return this.Description;
            }
        }
     
        internal sealed class MacStyle : IStyle
        {
            public String Description { get; private set; }
     
            public MacStyle()
            {
                this.Description = "Mac风格按钮";
            }
     
            public String ShowInfo()
            {
                return this.Description;
            }
        }
        #endregion
     
        #region 窗口风格
        internal sealed class WindowsWindow : IWindow
        {
            public String Description { get; private set; }
     
            public WindowsWindow()
            {
                this.Description = "Windows风格窗口";
            }
     
            public String ShowInfo()
            {
                return this.Description;
            }
        }
     
        internal sealed class MacWindow : IWindow
        {
            public String Description { get; private set; }
     
            public MacWindow()
            {
                this.Description = "Mac风格窗口";
            }
     
            public String ShowInfo()
            {
                return this.Description;
            }
        }
        #endregion
     
        #region 工厂接口规范
        internal interface IFactory
        {
            IWindow MakeWindow();
     
            IStyle MakeStyle();
        }
        #endregion
     
        #region 具体工厂的实现
        internal sealed class WindowsFactory : IFactory
        {
            public IWindow MakeWindow()
            {
                return new WindowsWindow();
            }
     
            public IStyle MakeStyle()
            {
                return new WindowsStyle();
            }
     
        }
     
        internal sealed class MacFactory : IFactory
        {
            public IWindow MakeWindow()
            {
                return new MacWindow();
            }
     
            public IStyle MakeStyle()
            {
                return new MacStyle();
            }
     
        }
        #endregion
     
     
    }

    在主程序中这样去调用它:

                #region 通过学习接口与反射再次看看抽象工厂模式
                IWindow window = ReflectionFactory.MakeWindow();
                Console.WriteLine("创建 " + window.ShowInfo());
                IStyle style = ReflectionFactory.MakeStyle();
                Console.WriteLine("创建 " + style.ShowInfo());
      #endregion

    XML配置文件如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <config>
      <window>MacWindow</window>
      <style>MacStyle</style>
    </config>
  • 相关阅读:
    ML、DL及RL介绍和区别
    ros工作空间中文件夹结构
    C算法,已知结构体成员地址,如何得出结构体的基地址?
    循*迹小车轨道识别算法
    树莓派ssh卡顿之双机互联解决
    楼宇对讲自动开门的设计与实现
    JavaJSONArray jsonArray = JSONArray.fromObject()使用
    Java虚拟机详解JVM常见问题总结
    git 修改commit信息 Dawa
    通过commit_id找回文件 Dawa
  • 原文地址:https://www.cnblogs.com/lori/p/2077727.html
Copyright © 2011-2022 走看看