ASP.NET中的抽象工厂模式

一、抽象工厂的概念:

抽象工厂模式是为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

在上一篇中介绍了工厂方法模式(https://blog.csdn.net/Jie_Studio/article/details/88970736),工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法模式每个具体工厂类只完成单个实例的创建,所以它具有很好的可扩展性。但是在现实生活中,一个工厂只创建单个产品这样的例子很少,因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题,这是本篇所要介绍的内容。

同样,还是根据上个案例一样,做了一个简单的修改:

1.先定义两个具体产品的抽象类:

    /// 
    /// 牛奶的抽象类,可以供地方继承
    /// 
    public abstract class Milk
    {
        // 输出方法
        public abstract void Print();
    }

    /// 
    /// 果汁的抽象类,可以供地方继承
    /// 
    public abstract class Juice
    {
        // 输出方法
        public abstract void Print();
    }

2.创建地方类继承产品类:

    /// 
    /// 上海的牛奶类
    /// 
    public class ShangHaiMilk : Milk
    {
        public override void Print()
        {
            Console.WriteLine("一瓶上海牛奶!");
        }
    }
    /// 
    /// 上海的果汁类
    /// 
    public class ShangHaiJuice : Juice
    {
        public override void Print()
        {
            Console.WriteLine("一瓶上海果汁!");
        }
    }

    /// 
    /// 北京的牛奶类
    /// 
    public class BeiJingMilk : Milk
    {
        public override void Print()
        {
            Console.WriteLine("一瓶北京牛奶!");
        }
    }
    /// 
    /// 北京的果汁类
    /// 
    public class BeiJingJuice : Juice
    {
        public override void Print()
        {
            Console.WriteLine("一瓶北京果汁!");
        }
    }

3.定义一个抽象工厂类,提供创建两个不同地方的牛奶和果汁的接口

    /// 
    /// 抽象工厂类,提供创建两个不同地方的牛奶和果汁的接口
    /// 
    public abstract class AbstractFactory
    {
        //牛奶接口
        public abstract Milk CreateMilk();

        //果汁接口
        public abstract Juice CreateJuice();
    }

4.创建地区工厂继承抽象工厂类:

    /// 
    /// 上海工厂负责出售上海的牛奶和果汁
    /// 
    public class ShangHaiFactory : AbstractFactory
    {
        public override Juice CreateJuice()
        {
            return new ShangHaiJuice();
        }

        public override Milk CreateMilk()
        {
            return new ShangHaiMilk();
        }
    }

    /// 
    /// 北京工厂负责出售北京的牛奶和果汁
    /// 
    public class BeiJingFactory : AbstractFactory
    {
        public override Juice CreateJuice()
        {
            return new BeiJingJuice();
        }

        public override Milk CreateMilk()
        {
            return new BeiJingMilk();
        }
    }

优点:抽象工厂模式将具体产品的创建延迟到具体工厂的子类中,这样将对象的创建封装起来,可以减少客户端与具体产品类之间的依赖,从而使系统耦合度低,这样更有利于后期的维护和扩展。

以上,就是我个人对抽象工厂模式的理解;如果有不足的地方,希望可以指正;

你可能感兴趣的:(ASP.NET中的抽象工厂模式)