前言:

最近在总结设计模式,再次看设计模式,理解又加深了不少!故来总结一下!

核心:

定义:

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类.简要介绍一下本次的例子:创建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(); 没有指定具体的哪个用户或者哪个部门的对象.这就是抽象工厂的精髓所在.

总结:

后续阶段会持续总结设计模式,欢迎大家交流.