提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
//用户信息
public interface IUser
{
void InsertUser();
void GetUserInfo();
}
//用户信息MySql
public class User_MySql : IUser
{
public void GetUserInfo()
{
System.Diagnostics.Debug.WriteLine("MySql查询到一条用户信息");
}
public void InsertUser()
{
System.Diagnostics.Debug.WriteLine("MySql新增用户成功");
}
}
//抽象工厂接口
interface IDBFactory
{
IUser CreateUserService();
}
//MySql工厂实现类
public class DBFactory_MySql : IDBFactory
{
public IUser CreateUserService()
{
return new User_MySql();
}
}
//测试
IDBFactory fac = new DBFactory_MySql();
IUser user = fac.CreateUserService();
user.InsertUser();
user.GetUserInfo();
如果因为某某原因想更换成SqlServer数据库只需要新增相应的代码就可以很轻松的切换
//用户信息SqlServer
public class User_SqlServer : IUser
{
public void GetUserInfo()
{
System.Diagnostics.Debug.WriteLine("SqlServer查询到一条用户信息");
}
public void InsertUser()
{
System.Diagnostics.Debug.WriteLine("SqlServer新增用户成功");
}
}
public class DBFactory_SqlServer : IDBFactory
{
public IUser CreateUserService()
{
return new User_SqlServer();
}
}
//调用方式修改一下
IDBFactory fac = new DBFactory_SqlServer();
IUser user = fac.CreateUserService();
user.InsertUser();
user.GetUserInfo();
在原有代码中只需要修改抽象工厂的实例对象就可以了IDBFactory fac = new DBFactory_SqlServer();如果项目中很多地方都创建了这样一个对象。 那改动起来也是很麻烦的事情。 如果结合IOC来使用的话就非常方面了。只需要修改注入方式就可以了。
public class DesignModelController : Controller
{
IDBFactory fac;
public DesignModelController(IDBFactory _fac)
{
this.fac = _fac;
}
public ActionResult Index()
{
fac.CreateUserService().InsertUser();
return View();
}
}