设计模式学习笔记——抽象工厂(Abstract Factory)
1.特点:当工厂方法无法满足多系列问题时,再重构为抽象工厂。
2.概念:抽象工厂模式为一个产品家族提供了统一的创建接口。当需要这个产品家族的某一系列的时候,可以从抽象工厂中选出相对应的系列来创建一个具体的工厂类别。
3.类图:

4.程序实现:
/// <summary>
/// 抽象工厂类
/// </summary>
public interface IDatabaseFactory
{
IEmployee CreateEmployee();
IUser CreateUser();
}
/// <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();
}
}
/// <summary>
/// 抽象产品
/// </summary>
public interface IUser
{
User GetUser();
bool SaveUser();
}
/// <summary>
/// 抽象产品
/// </summary>
public interface IEmployee
{
Employee GetEmployee();
bool SaveEmployee();
}
/// <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;
}
}

浙公网安备 33010602011771号