紧接着工厂方法模式的案例[http://www.cnblogs.com/adzhouyang/p/7398000.html]
当需要新增一个产品,比如新增一个Department对象时,工厂方法模式就需要修改
结构如下
此时,需要新增一个Department接口,以及分别用两种数据库访问方式实现的具体Department对象,在抽象工厂类和具体工厂类里,也需要新增相关的产生Department对象方法。
interface IDepartment
{
void Insert(Department department);
Department GetDepartment(int id);
}
public class AccessDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("InsertAccessDepartment");
}
public Department GetDepartment(int id)
{
Console.WriteLine("AccessDepartmentlist");
return null;
}
}
public class SqlDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("InsertSqlDepartment");
}
public Department GetDepartment(int id)
{
Console.WriteLine("SqlDepartmentlist");
return null;
}
}
interface IFactory
{
IUser CreateUser();
//新增方法
IDepartment CreateDepartment();
}
public class SqlFactory : IFactory
{
public IUser CreateUser()
{
return new SqlUser();
}
public IDepartment CreateDepartment()
{
return new SqlDepartment();
}
}
public class AccessFactory : IFactory
{
public IUser CreateUser()
{
return new AccessUser();
}
public IDepartment CreateDepartment()
{
return new AccessDepartment();
}
}
public static void Main(string[] args)
{
User user = new User();
Department dep = new Department();
IFactory factory = new AccessFactory();
IUser iu = factory.CreateUser();
iu.Insert(user);
iu.GetUser(1);
IDepartment ip = factory.CreateDepartment();
ip.Insert(dep);
ip.GetDepartment(1);
}
只有一个产品系列的时候,比如案例中只有一个User对象的时候,只需要用到工厂方法模式
当解决涉及到多个产品系列的问题,比如案例中增加了Department对象时,就需要用到抽象工厂模式
也就是抽象工厂模式是对工厂方法模式的扩展
抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂优缺点
优点:只需要改变具体工厂即可使用不同的产品配置
缺点:增加产品系列时,需要同时改动每个具体工厂
本文根据《大话设计模式》整理得出