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>
  • 相关阅读:
    一个基于JBoss5.1+EJB3.0 登陆应用
    专题开发十二:JEECG微云高速开发平台-基础用户权限
    linux监控脚本
    centos Ddos防范开源软件使用及apache ab压测 测试
    centos curl web站点监控实践
    linux Qt5开发案例实践
    CentOS 基于KVM的云计算之虚拟化libvirt shell --- virsh
    linux shell命令行下操作mysql 删除mysql指定数据库下的所有表--亲测成功百分百测试通过--绝对可靠
    C指针
    Aix5~6小机运维
  • 原文地址:https://www.cnblogs.com/lori/p/2077727.html
Copyright © 2011-2022 走看看