系统架构技能之设计模式—抽象工厂模式

  一、上篇回顾

  上篇我们主要讲述了简单工厂模式和工厂模式。并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下:

  简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建。

  工厂模式:多个工厂负责多个类型对象的创建,每个工厂只负责具体类型对象的创建,支持无缝的新增类型对象的创建,需要实现工厂接口类和具体的类型对象类。

  我们来简单的对比下这2个模式的优缺点:

模式名称优点缺点
简单工厂模式一个工厂负责所有对象的创建,简单灵活不符合高内聚的原则,不支持无缝的扩展
工厂模式可以无缝的新增类型,每个工厂职责单一,符合高内聚的原则工厂类太多,难以维护。

  工厂模式,很优雅的解决了应用程序使用对象时的无限new()的操作,同时降低了系统应用之间的耦合性,提高了系统的可维护性和适应性。

  二、摘要

  本文主要是针对创建型模式中的抽象工厂模式进行讲述,抽象工厂模式是在简单工厂模式的基础上扩展而成的新模式,将简单工厂中的对象的创建过程进行了很优雅的动态配置来完成无缝的扩展,当然通过一些扩展,可以构建出可支持动态新增或者删除对象的抽象工厂模式。本文将会给出具体的实现方案,相比工厂模式,抽象工厂模式是一个工厂负责多个对象的创建,返回的具体的类型是这个对象的抽象类型。这样,在客户端引用的时候只需要使用这个工厂返回的对象类型,抽象工厂会自动根据对象的类型动态的创建这个类型对象的实例。大体的过程如下:

image  上面的图片呢,主要是针对经典的抽象工厂模式给出了一个实现草图的模拟,而我们在实际的项目中可能并不希望给出这么多的抽象工厂工厂实现,我只想给出一个通用的抽象工厂实现,通过静态方法直接调用,返回我想要的对象类型的实例,而且这个对象类型是可以动态配置的,那么我们如何做到呢?这就是本篇需要讨论的实现方案。本篇将会从以下几点进行讲述抽象工厂模式:

  1、抽象工厂模式的简单实例代码-这里给出的是经典的抽象工厂模式实例代码。我们从经典的实例代码中可以看出这个工厂模式的一些缺点。

  2、根据经典工厂模式的缺点,我们给出改进的方案,进一步给出项目中可以使用的通用方案实现。

  3、给出上篇中的通过委托来实现的工厂模式方案。

  4、通过特性+反射的形式来动态的创建对象。

  三、本文大纲

       a、上篇回顾。

       b、摘要。

       c、本文大纲。

       d、抽象工厂模式的特点及使用场景。

       e、抽象工厂模式的实现方案。

       f、抽象工厂模式使用总结。

       g、系列进度。

       h、下篇预告。

  四、抽象工厂模式的特点及使用场景

  抽象工厂可以说是三类工厂模式中使用最广泛的,也是最受大家喜爱的模式之一,因为抽象工厂模式解决了一系列相互依赖的对象或者有组合关系的对象的创建过程。举个简单的例子来说,我们以电脑的显卡和风扇来说吧,我们知道显卡一般在玩游戏的时候,由于渲染图形会产生大量的热量,如果没有好的风扇那么可能无法达到好的散热的效果,这个时候我们可以把显卡和风扇的创建放在一个抽象工厂中进行创建,因为这2个对象是具有依赖关系的对象,那么我们来给出这个例子的完整实例代码:

  先看看2个对象类型的接口和抽象工厂的接口定义:

/// <summary>
/// 定义显卡抽象对象接口
/// </summary>
public interface IDisplayCard
{
}

/// <summary>
/// 定义显卡风扇抽象对象接口
/// </summary>
public interface IDisplayFan
{
}

/// <summary>
/// 定义显卡设备抽象工厂接口
/// </summary>
public interface IAbstractDriveFactory
{
IDisplayCard CreateDisplayCard();

IDisplayFan CreateDisplayFan();
}

it知识库系统架构技能之设计模式—抽象工厂模式,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。