工厂接口:提供创建对象的接口。
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