《设计模式解析》摘录(8)

    技术2022-05-11  22

    Abstract Factory 模式

        switch 语句本身常常说明:

        1、需要多态行为; 2、存在职责错放。

        应该考虑用一种更通用的解决方案,比如抽象代替 switch 语句,或者将职责赋予其他对象;

        工厂是有一定职责的......而且是内聚的。

        Abstract Factory 模式的3各关键的概念步骤:

        1、找到变化并封装之;

        2、优先使用对象聚集,而不是类继承;

        3、针对接口而不是实现设计。

        这个模式之所有称为 Abstract Factory,不是因为工厂是用每种情况有一个派生类的抽象类实现的,而是因为它要创建的东西本身是抽象定义的。工厂各种变化的实现如何选择,模式并没有具体规定。

        决定需要哪个工厂对象实际上于确定使用哪一组对象是相同的。

        不同应用程序都使用同一子系统。在这种情况下,工厂对象将传给子系统,告诉子系统将要使用哪些对象。此时,通常主系统知道子系统需要哪一组对象。在调用子系统之前,将实例化正确的工厂对象。

    关键特征:

        意图:需要为特定的客户(或情况)提供对象组;

        问题:需要实例化一组相关的对象; 

        解决方案:协调对象组的创建。提供一种方式,将如何执行对象实例化的规则从使用这些对象的客户对象提取出来。

        参与者与协作者:Abstract Factory 为如何创建对象组的每个成员定义接口。一般每个组都由独立的 ConcreteFactory 进行创建。

        效果:这个模式将“使用哪些对象”的规则与“如何使用这些对象”的逻辑分离开来。

        实现:定义一个抽象类来指定创建哪些对象,然后为每组实现一个具体类。可以用表或问题完成同样的任务。

        Abstract Factory 模式为我们提供了一种新的分解方式——根据职责分解。使用这种方法可以将问题分解成:

        1、谁在使用我们的特定对象;

        2、谁来决定使用哪些特定对象。

        在必须协调一组对象的创建时,可以应用 Abstract Factory 模式。它提供了一种方式,将如何执行对象实例化的规则从使用这些对象的客户对象提取出来。

        1、首先,找出实例化规则,定义一个带接口的抽象类,其中的接口为每种需要实例化的对象提供一个方法;

        2、然后,从这个类为每个组实现具体类;

        3、客户对象使用具体工厂对象创建所需的服务对象。


    最新回复(0)