/// <summary>
/// 与SqlServer相关产品的实现
/// </summary>
public class SqlServerDatabaseFactory : IDatabaseFactory
{
public IEmployee CreateEmployee()
{
return new SqlEmployee();
}
public IUser CreateUser()
{
return new SqlUser();
}
}
/// <summary>
/// 与Access相关产品的实现
/// </summary>
public class AccessDatabaseFactory : IDatabaseFactory
{
public IEmployee CreateEmployee()
{
return new AccessEmployee();
}
public IUser CreateUser()
{
return new AccessUser();
}
}
3.3.3 两个抽象产品,分别是IUser和IEmployee
/// <summary>
/// 抽象产品
/// </summary>
public interface IUser
{
User GetUser();
bool SaveUser();
}
/// <summary>
/// 抽象产品
/// </summary>
public interface IEmployee
{
Employee GetEmployee();
bool SaveEmployee();
}
3.3.4 具体产品的实现
/// <summary>
/// 与SqlServer相关的具体产品User
/// </summary>
public class SqlUser : IUser
{
public User GetUser()
{
return null;
}
public bool SaveUser()
{
return false;
}
}
/// <summary>
/// 与SqlServer相关的具体产品Employee
/// </summary>
public class SqlEmployee : IEmployee
{
public SqlEmployee()
{
}
public Employee GetEmployee()
{
return null;
}
public bool SaveEmployee()
{
return false;
}
}
/// <summary>
/// 与Access相关的具体产品User
/// </summary>
public class AccessUser : IUser
{
public AccessUser()
{
}
public User GetUser()
{
return null;
}
public bool SaveUser()
{
return false;
}
}
/// <summary>
/// 与Access相关的具体产品Employee
/// </summary>
public class AccessEmployee : IEmployee
{
public AccessEmployee()
{
}
public Employee GetEmployee()
{
return null;
}
public bool SaveEmployee()
{
return false;
}
}
4. 模式总结
4.1 优点
4.1.1 具体产品从客户代码中被分离出来
4.1.2 容易改变产品的系列(如SqlServer产品系列,Access产品系列)
4.1.3 将一个系列的产品族统一到一起创建
4.2 缺点
在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口,如增加一种产品Customer变得非常困难。
4.3 实用范围
4.3.1 一个系统要独立于它的产品的创建、组合和表示时。
4.3.2 一个系统要由多个产品系列中的一个来配置时。










