• 反射使抽象工厂模式的面向对象更上一层楼(知识点:依赖注入,反射,多态性,操作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>
  • 相关阅读:
    SIFT,SURF,ORB,FAST,BRISK 特征提取算法比较
    OpenCV 4.2.0 编译成功日志(Mac)
    Ceres Solver Bibliography
    Linux下重启就需要重新激活eth0的解决办法(ifup eth0)
    PS(光影魔术手)
    软件项目开发各阶段文档模板(参考)
    敏捷、瀑布开发模式
    QA
    QC
    会计人必知的实务基础知识
  • 原文地址:https://www.cnblogs.com/lori/p/2077727.html
Copyright © 2020-2023  润新知