• 抽象工厂+反射


    工厂接口:提供创建对象的接口。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace AbstractFactory.InterfaceProvide
    {
        public interface IFactory
    	{
    		IUserInfo CreateUser();
    		IDepartment CreateDepartment();
    	}
    }
    

    实例接口:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace AbstractFactory.InterfaceProvide
    {
        public interface IDepartment
    	{
    		void GetEntity(int id);
    		void Insert(Model.Department model);
    	}
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace AbstractFactory.InterfaceProvide
    {
        public interface IUserInfo
    	{
    		void GetEntity(int id);
    		void Insert(Model.UserInfo model);
    	}
    }
    

      

    抽象工厂类:通过反射创建对应的不同的工厂。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    using AbstractFactory.InterfaceProvide;
    using System.Xml;
    
    namespace AbstractFactory.Fac
    {
        public class DataAccess : IFactory
        {
            //public string db = "SqlServer";
            public static string db = GetDB();
    
            public static string GetDB()
            {
                XmlDocument doc = new XmlDocument();
                string dir = AppDomain.CurrentDomain.BaseDirectory.Replace("\bin\Debug", "");
    
                doc.Load(dir + "App.xml");
                XmlElement xe = doc.DocumentElement;
                string val = xe.ChildNodes[0].InnerText;
                return val;
            }
    
    
            public static IFactory CreateFac()
            {
                return (IFactory)Assembly.Load("AbstractFactory").CreateInstance("AbstractFactory.Fac." + db + "Factory");
            }
    
            //public IUserInfo CreateUser()
            //{
            //    return (IUserInfo)Assembly.Load("AbstractFactory").CreateInstance("AbstractFactory.DAL." + db + "." + db + "UserInfo");
            //}
    
            //public IDepartment CreateDepartment()
            //{
            //    return (IDepartment)Assembly.Load("AbstractFactory").CreateInstance("AbstractFactory.DAL." + db + "." + db + "Department");
            //}
        }
    }
    

      

    Access工厂:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using AbstractFactory.InterfaceProvide;
    using AbstractFactory.DAL;
    using AbstractFactory.DAL.Access;
    
    namespace AbstractFactory.Fac
    {
        public class AccessFactory : IFactory
    	{
    
    		public IUserInfo CreateUser()
    		{
    			return new AccessUserInfo();
    		}
    
    		public IDepartment CreateDepartment()
    		{
    			return new AccessDepartment();
    		}
    	}
    }
    

      

    SqlServer工厂:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using AbstractFactory.InterfaceProvide;
    
    namespace AbstractFactory.Fac
    {
    	public class SqlServerFactory : IFactory
    	{
    		public IUserInfo CreateUser()
    		{
    			return new DAL.SqlServer.SqlServerUserInfo();
    		}
    
    		public IDepartment CreateDepartment()
    		{
    			return new DAL.SqlServer.SqlServerDepartment();
    		}
    	}
    }
    

    通过加载配置文件,选择初始化哪个工厂。

    <?xml version="1.0" encoding="utf-8" ?>
    <DataBase>
      <Type>SqlServer</Type>
    </DataBase>
    

      

    要实例的类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using AbstractFactory.InterfaceProvide;
    
    namespace AbstractFactory.DAL.Access
    {
    	public class AccessDepartment : IDepartment
    	{
    		public void GetEntity(int id)
    		{
    			Console.WriteLine("在Access中的Department表获得一个实体!!!");
    		}
    
    		public void Insert(Model.Department model)
    		{
    			Console.WriteLine("在Access中的Department表添加一个实体!!!");
    		}
    	}
    
            public class AccessUserInfo : IUserInfo
    	{
    		public void GetEntity(int id)
    		{
    			Console.WriteLine("在Access中的UserInfo表获得一个实体!!!");
    		}
    
    		public void Insert(Model.UserInfo model)
    		{
    			Console.WriteLine("在Access中的UserInfo表添加一个实体!!!");
    		}
    	}
    
    }
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using AbstractFactory.InterfaceProvide;
    using AbstractFactory.Model;
    
    namespace AbstractFactory.DAL.SqlServer
    {
    	public class SqlServerDepartment : IDepartment
    	{
    		public void Insert(Department user)
    		{
    			Console.WriteLine("在Sqlserver中的Department表添加一个实体!!!");
    		}
    		public void GetEntity(int id)
    		{
    			Console.WriteLine("在Sqlserver中的Department表获得一个实体!!!");
    		}
    	}
    
            public class SqlServerUserInfo : IUserInfo
    	{
    		public void Insert(UserInfo user)
    		{
    			Console.WriteLine("在Sqlserver中的UserInfo表添加一个实体!!!");
    		}
    		public void GetEntity(int id)
    		{
    			Console.WriteLine("在Sqlserver中的UserInfo表获得一个实体!!!");
    		}
    	}
    }
    

    Model:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace AbstractFactory.Model
    {
    	public class UserInfo
    	{
    		private string _UserName;
    
    		public string UserName
    		{
    			get { return _UserName; }
    			set { _UserName = value; }
    		}
    
    		private int _Age;
    
    		public int Age
    		{
    			get { return _Age; }
    			set { _Age = value; }
    		}
    	}
    
            public class Department
    	{
            public string Name { get; set; }
    	}
    }
    

    使用:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using AbstractFactory.DAL.Access;
    using AbstractFactory.DAL.SqlServer;
    using AbstractFactory.Fac;
    using AbstractFactory.InterfaceProvide;
    
    namespace AbstractFactory
    {
    	class Program
    	{
    		static void Main(string[] args)
    		{
    	//DataAccess da = new DataAccess();
                //IUserInfo sqlUser = da.CreateUser();
                //sqlUser.Insert(null);
                //sqlUser.GetEntity(1);
    
                IFactory fac = DataAccess.CreateFac();
                IUserInfo userInfo = fac.CreateUser();
                userInfo.GetEntity(1);
    
    			Console.ReadLine();
    
    			//AccessUserInfo AccessFac = new AccessFactory().CreateUser() as AccessUserInfo;
    			//AccessFac.Insert(null);
    			//AccessFac.GetEntity(1);
    			//Console.ReadLine();
    		}
    	}
    }
    

      

    人家写的非常详细:

    http://www.cnblogs.com/Terrylee/category/36516.html

  • 相关阅读:
    201521123065《java程序设计》第14周学习总结
    201521123065《java程序设计》第13周学习总结
    201521123065《java程序设计》第12周学习总结
    选择器
    浮动布局
    定位布局—position
    软工个人总结
    个人作业4——alpha阶段个人小结
    软件工程个人作业3
    结队编程
  • 原文地址:https://www.cnblogs.com/xsj1989/p/5280088.html
Copyright © 2020-2023  润新知