紧接着工厂方法模式的案例[]
当需要新增一个产品,比如新增一个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对象时,就需要用到抽象工厂模式 也就是抽象工厂模式是对工厂方法模式的扩展抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂优缺点
优点:只需要改变具体工厂即可使用不同的产品配置
缺点:增加产品系列时,需要同时改动每个具体工厂本文根据《大话设计模式》整理得出