반사 로 인해 추상 적 인 공장 모델 의 대상 을 한 단계 더 향상 시 켰 다(지식 점:주입,반사,다 형 성,XML 파일 조작 등)

11002 단어 추상 공장 모드
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>

좋은 웹페이지 즐겨찾기