设计模式-抽象工厂模式

紧接着工厂方法模式的案例[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对象时,就需要用到抽象工厂模式
也就是抽象工厂模式是对工厂方法模式的扩展

抽象工厂模式

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

抽象工厂优缺点

优点:只需要改变具体工厂即可使用不同的产品配置
缺点:增加产品系列时,需要同时改动每个具体工厂

本文根据《大话设计模式》整理得出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值