15.1 就不能换DB吗?
15.2 最基本的数据访问程序
namespace 抽象工厂模式 { class Program { static void Main(string[] args) { User user = new User(); SqlserverUser su = new SqlserverUser(); //与SQLServer耦合, su.Insert(user); su.GetUser(1); Console.Read(); } } //用户类, class User { private int _id; public int ID { get { return _id; } set { _id = value; } } private string _name; public string Name { get { return _name; } set { _name = value; } } } //操作User表类, class SqlserverUser { //新增用户, public void Insert(User user) { Console.WriteLine("在Sqlserver中给User表增加一条记录"); } //得到用户, public User GetUser(int id) { Console.WriteLine("在Sqlserver中根据ID得到User表一条记录"); return null; } } }
15.3 用了工厂方法模式的数据访问程序
namespace 抽象工厂模式 { class Program { static void Main(string[] args) { User user = new User(); //IFactory factory = new SqlServerFactory(); IFactory factory = new AccessFactory(); IUser iu = factory.CreateUser(); iu.Insert(user); iu.GetUser(1); Console.Read(); } } class User { private int _id; public int ID { get { return _id; } set { _id = value; } } private string _name; public string Name { get { return _name; } set { _name = value; } } } //IUser接口,用于客户端访问,解除与具体数据库的耦合, interface IUser { void Insert(User user); User GetUser(int id); } //SqlserverUser类,用于访问SQLServer的User, class SqlserverUser : IUser { public void Insert(User user) { Console.WriteLine("在Sqlserver中给User表增加一条记录"); } public User GetUser(int id) { Console.WriteLine("在Sqlserver中根据ID得到User表一条记录"); return null; } } //AccessUser类,用于访问Access的User, class AccessUser : IUser { public void Insert(User user) { Console.WriteLine("在Access中给User表增加一条记录"); } public User GetUser(int id) { Console.WriteLine("在Access中根据ID得到User表一条记录"); return null; } } //IFactory接口,定义一个创建访问User表对象的抽象的工厂接口, interface IFactory { IUser CreateUser(); } //SqlServerFactory类,实现IFactory接口,实例化SqlserverUser, class SqlServerFactory : IFactory { public IUser CreateUser() { return new SqlserverUser(); } } //AccessFactory类,实现IFactory接口,实例化AccessUser, class AccessFactory : IFactory { public IUser CreateUser() { return new AccessUser(); } } }
15.4 用了抽象工厂模式的数据访问程序
namespace 抽象工厂模式 { class Program { static void Main(string[] args) { User user = new User(); Department dept = new Department(); //IFactory factory = new SqlServerFactory(); IFactory factory = new AccessFactory(); IUser iu = factory.CreateUser(); iu.Insert(user); iu.GetUser(1); IDepartment id = factory.CreateDepartment(); id.Insert(dept); id.GetDepartment(1); Console.Read(); } } class User { private int _id; public int ID { get { return _id; } set { _id = value; } } private string _name; public string Name { get { return _name; } set { _name = value; } } } class Department { private int _id; public int ID { get { return _id; } set { _id = value; } } private string _deptName; public string DeptName { get { return _deptName; } set { _deptName = value; } } } interface IUser { void Insert(User user); User GetUser(int id); } class SqlserverUser : IUser { public void Insert(User user) { Console.WriteLine("在Sqlserver中给User表增加一条记录"); } public User GetUser(int id) { Console.WriteLine("在Sqlserver中根据ID得到User表一条记录"); return null; } } class AccessUser : IUser { public void Insert(User user) { Console.WriteLine("在Access中给User表增加一条记录"); } public User GetUser(int id) { Console.WriteLine("在Access中根据ID得到User表一条记录"); return null; } } interface IDepartment { void Insert(Department department); Department GetDepartment(int id); } class SqlserverDepartment : IDepartment { public void Insert(Department department) { Console.WriteLine("在Sqlserver中给Department表增加一条记录"); } public Department GetDepartment(int id) { Console.WriteLine("在Sqlserver中根据ID得到Department表一条记录"); return null; } } class AccessDepartment : IDepartment { public void Insert(Department department) { Console.WriteLine("在Access中给Department表增加一条记录"); } public Department GetDepartment(int id) { Console.WriteLine("在Access中根据ID得到Department表一条记录"); return null; } } interface IFactory { IUser CreateUser(); IDepartment CreateDepartment(); } class SqlServerFactory : IFactory { public IUser CreateUser() { return new SqlserverUser(); } public IDepartment CreateDepartment() { return new SqlserverDepartment(); } } class AccessFactory : IFactory { public IUser CreateUser() { return new AccessUser(); } public IDepartment CreateDepartment() { return new AccessDepartment(); } } }
15.5 抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类,
15.6 抽象工厂模式的优点与缺点
15.7 用简单工厂来改进抽象工厂
15.8 用反射+抽象工厂的数据访问程序
15.9 用反射+配置文件的数据访问程序
15.10 无痴迷 不成功