场景描述: 假设现在有一个User类(如下),原本设计程序使用SqlServer访问,现在因为客户需求的变化,需要使用Access来访问 public class User { private int id; private string name; public int ID { ge
public class User
{
private int id;
private string name;
public int ID
{
get { return id; }
set { id = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
}
对于这种场景,单纯的去修改访问数据库代码,把SqlServer的访问类,修改成Access的访问类,不仅会出现很多问题,因为两种数据库查询语句本身就有区别,最重要的是扩展性非常差,万一以后需要改成用MySql来访问,又是一通改。所以这里用到了工厂方法模式。 首先定义一个User对象接口
//User对象接口类
public interface IUser
{
//业务逻辑
void Insert(User user);
User GetUser(int i);
}
然后是两种数据库实现的User对象,都继承于IUser接口
//Sql数据库User对象
public class SqlUser : IUser
{
public void Insert(User user)
{
Console.WriteLine("InsertSqlUser");
}
public User GetUser(int i)
{
Console.WriteLine("SqlUserList");
return null;
}
}
//Access数据库User对象
public class AccessUser : IUser
{
public void Insert(User user)
{
Console.WriteLine("InsertAccessUser");
}
public User GetUser(int i)
{
Console.WriteLine("AccessUserList");
return null;
}
}
定义一个工厂接口
//工厂接口
interface IFactory
{
//继承类可以根据不同的需求产生不同的User对象
IUser CreateUser();
}
具体的工厂,根据不同的需求,产生不同的User对象
//Sql数据库工厂
public class SqlFactory : IFactory
{
//访问Sql数据库的User对象
public IUser CreateUser()
{
return new SqlUser();
}
}
//Access数据库工厂
public class AccessFactory : IFactory
{
//访问Access数据库的User对象
public IUser CreateUser()
{
return new AccessUser();
}
}
