3.抽象工厂模式

1.定义

Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。)

2.模式说明

抽象工厂模式是工厂方法模式的升级版本,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。

3.抽象工厂模式

3.抽象工厂模式

3.通用代码

    /// <summary>

    /// 抽象产品类

    /// </summary>

    public abstract class AbstractProductA

    {

        //抽象方法

        public abstract void Method1();

    }



    /// <summary>

    /// 具体产品类

    /// </summary>

    public class ProductA1 : AbstractProductA

    {

        public override void Method1() 

        {

            //业务逻辑处理

            Console.WriteLine("ProductA1");

        }

    }



    /// <summary>

    /// 具体产品类

    /// </summary>

    public class ProductA2 : AbstractProductA

    {

        public override void Method1()

        {

            //业务逻辑处理

            Console.WriteLine("ProductA2");

        }

    }
    /// <summary>

    /// 抽象产品类

    /// </summary>

    public abstract class AbstractProductB

    {

        //抽象方法

        public abstract void Method1();

    }



    /// <summary>

    /// 具体产品类

    /// </summary>

    public class ProductB1 : AbstractProductB

    {

        public override void Method1()

        {

            //业务逻辑处理

            Console.WriteLine("ProductB1");

        }

    }



    /// <summary>

    /// 具体产品类

    /// </summary>

    public class ProductB2 : AbstractProductB

    {

        public override void Method1()

        {

            //业务逻辑处理

            Console.WriteLine("ProductB2");

        }

    }

    /// <summary>

    /// 抽象工厂类
/// 工厂类定义了两个产品族的产品创建, 有N个产品族,在抽象工厂类中就应该有N个创建方法。
/// </summary> public abstract class AbstractFactory {
//创建A产品族产品
public abstract AbstractProductA CreateProductA();
//创建B产品族产品
public abstract AbstractProductB CreateProductB(); } /// <summary> /// 具体工厂类,有M个产品等级就应该有M个实现工厂类,在每个实现工厂中,实现不同产品族的生产任务。 /// </summary> public class Creator1 : AbstractFactory { public override AbstractProductA CreateProductA() { return new ProductA1(); } public override AbstractProductB CreateProductB() { return new ProductB1(); } } /// <summary> /// 具体工厂类 /// </summary> public class Creator2 : AbstractFactory { public override AbstractProductA CreateProductA() { return new ProductA2(); } public override AbstractProductB CreateProductB() { return new ProductB2(); } }
    /// <summary>

    /// 场景类

    /// </summary>

    public class Client

    {

        public static void Main(string[] args)

        {

            AbstractFactory creator1 = new Creator1();



            AbstractProductA a1 = creator1.CreateProductA();



            AbstractProductB b1 = creator1.CreateProductB();



            a1.Method1();



            b1.Method1();



            Console.ReadKey();



        }

    }

 4.模式的优缺点

(1)优点

.封装性:每个产品的实现类不是高层模块要关心的,它要关心的是什么?是接口,是抽象,它不关心对象是如何创建出来的,这由谁负责呢?工厂类,只要知道工厂类是谁,就能创建出一个需要的对象。

(2)缺点

抽象工厂模式的最大缺点就是产品族扩展非常困难,为什么这么说呢?以通用代码为例,如果要增加一个产品C,也就是说产品家族由原本的2个增加到3个,看看我们的程序有多少改动吧!抽象类AbstractFactory要增加一个方法CreateProductC(),然后两个实现类也都要修改,这严重违反了开闭原则。

 

参考

1.设计模式之禅

2.Terrylee 抽象工厂模式

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