`

抽象工厂模式 Abstract Factory 选择产品簇的实现

阅读更多
工厂方法模式或简单工厂关注的是单个产品对象的创建,比如创建CPU的工厂方法,它就只关心如何创建CPU对象,而创建主板的工厂方法,就只关心如何创建主板对象。
public interface AbstractFactory{
  public AbstractProductA createProductA();
  public AbstractProductB createProductB();
}

public interface AbstractProductA {
 
}

public interface AbstractProductB {
 
}

public class ProductA1 implements AbstractProductA {
 
}

public class ProductA2 implements AbstractProductA {
 
}

public class ProductB1 implements AbstractProductB {
 
}

public class ProductB2 implements AbstractProductB {
 
}

public class ConcreteFactory1 implements AbstractFactory {
  public AbstractProductA createProductA() {
    return new ProductA1();
  }
  public AbstractProductB createProductB() {
    return new ProductB1();
  }
}

public class ConcreteFactory2 implements AbstractFactory {
  public AbstractProductA createProductA() {
    return new ProductA2();
  }
  public AbstractProductB createProductB() {
    return new ProductB2();
  }
}

客户端代码可以如下:
AbstractFactory af = new ConcreteFactory1();
af.createProductA();
af.createProductB();

AbstractFactory在java中通常实现成为接口,具体的实现是在实现类中。
AbstractFactory定义的创建创建产品的方法可以看出是工厂方法,而这些工厂方法的实现就延迟到了具体的工厂里面。也就是说使用工厂方法来实现抽象工厂。

可以改造为使用参数的抽象工厂。

DAO模式实现的时候采用工厂方法和抽象工厂。

使用抽象工厂实现DAO模式
public abstract class DAOFactory{
  public abstract OrderMainDAO createOrderMainDAO();
  public abstract OrderDetailDAO createOrderDetailDAO();
}

public interface OrderMainDAO {
  public void saveOrderMain();
}

public interface OrderDetailDAO {
  public void saveOrderDetail();
}

public class RdbMainDAOImpl implements OrderMainDAO {
  public void saveOrderMain() {
    System.out.println("now in RdbMainDAOImpl");
  }
}

public class RdbDetailDAOImpl implements OrderDetailDAO {
  public void saveOrderDetail() {
     System.out.println("now in RdbDetailDAOImpl");
  }
}

public class XmlMainDAOImpl implements OrderMainDAO {
  public void saveOrderMain() {
    System.out.println("now in XmlMainDAOImpl");
  }
}

public class XmlDetailDAOImpl implements OrderDetailDAO {
  public void saveOrderDetail() {
    System.out.println("now in XmlDetailDAOImpl");
  }
}

public class RdbDAOFactory extends DAOFactory {
  public OrderMainlDAO createOrderMainDAO() {
    return new RdbMainDAOImpl();
  }
  public OrderDetailDAO createOrderDetailDAO() {
    return new RdbDetailDAOImpl();
  }
}

public class XmlDAOImpl extends DAOFactory {
  public OrderMainDAO createOrderMainDAO() {
    return new XmlMainDAOImpl();
  }
  public OrderDetailDAO createOrderDetailDAO() {
    return new XmlDetailDAOImpl();
  }
}

客户端可以用下面的代码:
DAOFactory df = new RdbDAOFactory();
OrderMainDAO mainDAO = df.createOrderMainDAO();
OrderDetailDAO detailDAO = df.createOrderDetailDAO();

mainDAO.saveOrderMain();
detailDAO.saveOrderDetail();

抽象工厂优点:
分离接口和实现;使得切换产品簇变得容易

缺点:
不太容易扩展新的产品;容易造成类层次复杂
分享到:
评论

相关推荐

    抽象工厂模式abstractFactory

    抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它提供了一种创建对象集合的接口,而无需指定具体的产品类型。这种模式适用于当系统需要在不同平台或环境中创建一组相关或相互依赖的对象时,而这些...

    走进设计模式之抽象工厂(Abstract Factory)

    1. **模式结构**:抽象工厂模式通常包括抽象工厂接口(AbstractFactory),具体工厂类(ConcreteFactory),抽象产品接口(Product)以及具体产品类(ConcreteProduct)。抽象工厂定义了创建产品的方法,而具体工厂...

    创建型模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式是设计模式中的一种创建型模式,其主要目的是为了解耦客户端代码与具体产品的实现。在软件工程中,当系统需要根据不同的平台、环境或者配置产生一系列相关对象,而这些对象之间的关系又非常复杂时,抽象...

    抽象工厂AbstractFactory

    在实际编程中,抽象工厂模式可以提高代码的灵活性,使得系统更易于添加新的产品族,同时也能隔离客户端代码与具体产品实现之间的耦合。然而,如果产品族的扩展过于频繁,可能会导致抽象工厂的实现变得复杂,增加了...

    抽象工厂模式(Abstract Factory Pattern)

    ### 抽象工厂模式(Abstract Factory Pattern) #### 引入 在探讨抽象工厂模式之前,我们先回顾一下之前介绍过的简单工厂模式与工厂方法模式。这两种模式主要关注于解决对象创建过程中“new”操作的问题,使得创建...

    创建型-抽象工厂模式(Abstract Factory)

    1. 抽象工厂(Abstract Factory):这是模式的核心,定义了一组创建对象的接口,客户端通过这个接口请求创建所需的产品。这个接口不直接创建产品,而是将产品创建的职责委托给具体工厂。 2. 具体工厂(Concrete ...

    设计模式之-抽象工厂-AbstractFactory

    抽象工厂(Abstract Factory)设计模式是软件工程中一种重要的创建型设计模式,它提供了一种创建对象组的方式,这些对象属于同一族系并且彼此相关。这个模式的主要目标是定义一个接口,用于创建一族相关或相互依赖的...

    抽象工厂模式(Abstract factory)

    1. **抽象工厂接口(Abstract Factory)**:定义了一系列产品的创建方法,例如`NWFactory`可能是这个抽象工厂的实现,它包含了创建人和动物的方法。 2. **具体工厂类(Concrete Factory)**:实现了抽象工厂接口,...

    设计模式C++学习之抽象工厂模式(AbstractFactory)

    在这个例子中,`AbstractProductA`和`AbstractProductB`是抽象产品,`ConcreteProductA1/A2`和`ConcreteProductB1/B2`是具体产品,`AbstractFactory`是抽象工厂,`ConcreteFactory1/2`是具体工厂。客户端代码通过...

    C# 抽象工厂 AbstractFactory.rar

    这个压缩包“C# 抽象工厂 AbstractFactory.rar”可能包含了一个关于如何在C#中实现抽象工厂模式的实例或教程。 抽象工厂模式是一种创建型设计模式,它提供了一种创建对象族的方式,而无需指定具体类。在C#中,这种...

    抽象工厂模式(AbstractFactory)源代码

    设计模式抽象工厂模式(AbstractFactory)源代码

    抽象工厂模式(AbstractFactory)

    在给定的压缩包文件中,"AbstractFactory"可能包含了一些示例代码或者实现,用来解释抽象工厂模式的具体应用。这些代码可能包括抽象工厂接口、具体工厂类以及抽象产品和具体产品的定义。通过查看这些代码,我们可以...

    C#设计模式之抽象工厂(abstract factory)模式示例源代码

    - **具体工厂**:实现了抽象工厂接口,负责创建产品族中的产品实例。如`PcFactory`和`MacFactory`。 - **产品接口**:定义了一组产品接口,如`RAM`和`CPU`。 - **具体产品**:实现了产品接口,并提供了具体产品的...

    设计模式-抽象工厂模式(讲解及其实现代码)

    1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不直接实现它,而是由子类来具体实现。这个接口通常包含了一系列创建产品对象的方法。 2. 具体工厂(Concrete Factory):实现抽象工厂接口,提供具体...

    AbstractFactory 抽象工厂

    4. **具体产品(Concrete Product)**:实现了抽象产品接口,是抽象工厂模式中的实际被创建的对象,属于同一个产品族。 在实际应用中,抽象工厂模式可以用于以下场景: - 当系统需要为多个产品族提供产品时,每个...

    设计模式 之 “抽象工厂模式[Abstract Factory Pattern]”

    **抽象工厂模式(Abstract Factory Pattern)**是一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定它们的具体类。这种模式是当一个系统需要根据不同的平台或者环境来创建一组相关或相互依赖的对象时,...

    [创建型模式] 设计模式之抽象工厂模式(Abstract Factory Pattern)

    1. 抽象工厂(Abstract Factory):定义一个创建对象的接口,但不指定具体的产品实现,而是由具体的工厂类来实现。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责创建具体的产品对象。 3. 抽象产品...

    java之 抽象工厂模式(abstract factory)

    通过抽象工厂模式,我们可以隔离具体产品的实现细节,并允许添加新的产品类型而无需修改现有代码。 在这个场景中,“水果类”和“蔬菜类”是产品,如“香蕉”、“梨”、“黄瓜”和“大蒜”,它们代表了不同的产品族...

    抽象工厂模式代码

    `AbstractFactory`包下的文件可能包含`AbstractFactory.java`(抽象工厂接口)、`ConcreteFactory1.java`和`ConcreteFactory2.java`(具体工厂实现类)、`AbstractProductA.java`和`AbstractProductB.java`(抽象...

    工厂方法和抽象工厂——Factory Method & Abstract Factory

    在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...

Global site tag (gtag.js) - Google Analytics