紧接着工厂方法模式的案例[http://www.cnblogs.com/adzhouyang/p/7398000.html]
当须要新增一个产品,好比新增一个Department对象时,工厂方法模式就须要修改
结构以下
html
此时,须要新增一个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对象时,就须要用到抽象工厂模式
也就是抽象工厂模式是对工厂方法模式的扩展设计模式
提供一个建立一系列相关或相互依赖对象的接口,而无需指定它们具体的类。设计
优势:只须要改变具体工厂便可使用不一样的产品配置
缺点:增长产品系列时,须要同时改动每一个具体工厂code
本文根据《大话设计模式》整理得出htm