前言:
最近在总结设计模式,再次看设计模式,理解又加深了不少!故来总结一下!
核心:
定义:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.简要介绍一下本次的例子:创建sql和access工厂类,并创建访问sql server的user和department;访问access 的user和department
类图:
核心代码:
IFactory接口,定义一个创建访问User表的抽象的工厂接口
nterface IFactory { IUser CreateUser(); IDepartment CreateDepartment();//增加接口的方法 }SqlServerFactory类,实现IFactory接口,实例化SqlserverUser
class SqlServerFactory :IFactory { public IUser CreateUser() { return new SqlserverUser(); } public IDepartment CreateDepartment() { return new SqlserverDepartment(); } }AccessFactory类,实现IFactory接口,实例化AccessUser
class AccessFactory:IFactory { public IUser CreateUser() { return new AccessUser(); } public IDepartment CreateDepartment() { return new AccessDepartment(); } }IUser接口,用于客户端访问,解除与具体数据库访问的耦合
interface IUser { void Insert(User user); User GetUser(int id); }SqlserverUser类,用于访问SQL Server的User
class SqlserverUser :IUser { public void Insert(User user) { Console.WriteLine("在SQL Server中给User表增加一条信息"); } public User GetUser(int id) { Console.WriteLine("在SQL Server中根据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; } }
User类:
class User { private int _id; public int Id { get { return _id; } set { _id = value; } } private int _name; public int Name { get { return _name; } set { _name = value; } } }
department类:
class Department { private int _id; public int Id { get { return _id; } set { _id = value; } } private string _department; public string Department1 { get { return _department; } set { _department = value; } } }
department接口:
interface IDepartment { void Insert(Department department); Department GetDepartment(int id); }sqlServeDepartment类,用于访问SQL Server的Department
class SqlserverDepartment : IDepartment { public void Insert(Department department) { Console.WriteLine("在SQL Server中给Department表增加一条记录"); } public Department GetDepartment(int id) { Console.WriteLine("在SQL Server中根据ID得到deparment表中一条记录"); return null; } }
AccessDepartment类,用于访问Access的Department
class AccessDepartment :IDepartment { public void Insert(Department department) { Console.WriteLine("在Access中给Department表添加一条记录"); } public Department GetDepartment(int id) { Console.WriteLine("在Access中根据id得到department表一条记录"); return null; } }客户端调用:
static void Main(string[] args) { User user = new User(); Department dept = new Department(); IFactory factory = new SqlServerFactory(); IUser iu = factory.CreateUser(); iu.Insert(user); iu.GetUser(1); IDepartment id = factory.CreateDepartment(); id.Insert(dept); id.GetDepartment(1); Console.Read(); }
运行结果:
理解抽象工厂:
我们再次看看抽象工厂的定义,提供一个创建一系列相关或相互依赖对象的接口,在这个例子,指的是用户(User)和部门(Department)两个接口: IUser CreateUser(); IDepartment CreateDepartment(); 没有指定具体的哪个用户或者哪个部门的对象.这就是抽象工厂的精髓所在.
总结:
后续阶段会持续总结设计模式,欢迎大家交流.