`
baobeituping
  • 浏览: 1068445 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

工厂模式(抽象工厂)

 
阅读更多

抽象工厂与工厂方法模式最大的区别在于,工厂模式针对的是一个产品的等级结构,而抽象工厂需要面对多个产品等级结构。例如上文中水果的例子。现在果园要扩大生产了,原来生产的是水果A和蔬菜A,现在要多出生产水果B和蔬菜B。对于这种方式我们就可以用到抽象工厂。

水果总接口:

package 工厂模式.抽象工厂;

public interface Fruit {

 void grow();
 void harvest();
 void plant();
}

水果A:

package 工厂模式.抽象工厂;

public class FruitA implements Fruit {

 public void grow() {
  System.out.println("FruitA系列的 grow");

 }

 public void harvest() {
  System.out.println("FruitA系列的 harvest");

 }

 public void plant() {
  System.out.println("FruitA系列的 plant");

 }

}

水果B:

package 工厂模式.抽象工厂;

public class FruitB implements Fruit {

 public void grow() {
  System.out.println("FruitB系列的 grow");

 }

 public void harvest() {
  System.out.println("FruitB系列的 harvest");

 }

 public void plant() {
  System.out.println("FruitB系列的 plant");

 }

}
蔬菜总接口:

package 工厂模式.抽象工厂;

public interface Veggie {

 void grow();
 void harvest();
 void plant();
}
蔬菜A:

package 工厂模式.抽象工厂;

public class VeggieA implements Veggie {

 public void grow() {
  System.out.println("VeggieB系列的 grow");

 }

 public void harvest() {
  System.out.println("VeggieB系列的 harvest");

 }

 public void plant() {
  System.out.println("VeggieB系列的 plant");

 }

}
蔬菜B:

package 工厂模式.抽象工厂;

public class VeggieB implements Veggie {

 public void grow() {
  System.out.println("VeggieA系列的 grow");

 }

 public void harvest() {
  System.out.println("VeggieA系列的 harvest");

 }

 public void plant() {
  System.out.println("VeggieA系列的 plant");

 }

}
农夫工厂:同时有水果工厂和蔬菜工厂

package 工厂模式.抽象工厂;

public interface Garden {

 public Fruit createFruit();
 public Veggie createVeggie();
}
然后是生产A类水果或蔬菜的工厂

package 工厂模式.抽象工厂;

public class AGarden implements Garden {

 public Fruit createFruit()
 {
  return new FruitA();
 }
 public Veggie createVeggie()
 {
  return new VeggieA();
 }
}
生产B类水果和蔬菜的工厂:

package 工厂模式.抽象工厂;

public class BGarden implements Garden {

 public Fruit createFruit()
 {
  return new FruitB();
 }
 public Veggie createVeggie()
 {
  return new VeggieB();
 }
}
客户端:

package 工厂模式.抽象工厂;

public class Client {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Garden garden = new AGarden();
  FruitA af = (FruitA) garden.createFruit();
  af.grow();

 }

}
抽象工厂优点。在产品组的数目不变的情况下,增加新的产品等级结构是非常方便的。但是如果要多出一个与现有的产品组不同结构的新的产品等级结构就必须要修改所有的工厂角色。综合起来,抽象工厂模式以一种支持增加的新的产品,为新的产品增加提供方便,但不能为新产品的等级结构的增加提供方便。

分享到:
评论

相关推荐

    Java 工厂模式 抽象工厂 工厂方法模式

    - `factory2`、`factory3`、`factory1` 这些文件名可能是实现工厂模式的Java源代码,分别代表了不同级别的工厂类,如简单工厂、工厂方法和抽象工厂的实现。通过查看这些源代码,可以学习到如何在实际项目中应用这些...

    c# 工厂模式 抽象工厂模式

    在C#中,定义一个接口或抽象类作为抽象工厂,为每一系列相关产品提供一个具体工厂类。抽象工厂模式在处理跨平台或者跨系统交互时特别有用,因为它能确保在不同环境(如Windows、Linux)下创建的一组对象是协调一致的...

    工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式

    工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...

    简单工厂模式-工厂方法模式-抽象工厂模式

    在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...

    设计模式 - 抽象工厂模式

    设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...

    C++ 工厂模式 (简单工厂、工厂和抽象工厂)

    ### C++工厂模式详解:简单工厂、工厂方法与抽象工厂 #### 一、引言 在软件工程领域,设计模式是一种被广泛接受的解决常见问题的解决方案。其中,工厂模式是一种常用的创建型模式,用于封装对象的创建过程,提供一...

    简单工厂模式,工厂方法模式,抽象工厂模式

    本文将深入探讨三种工厂模式:简单工厂模式、工厂方法模式以及抽象工厂模式,并结合源码分析其应用场景和优缺点。 1. 简单工厂模式 简单工厂模式(Simple Factory Pattern)是一种静态工厂方法,它通过一个公共的...

    c#工厂模式——简单工厂_抽象工厂实例

    ### C#工厂模式详解——简单工厂与抽象工厂实例解析 #### 一、工厂模式概述 工厂模式是一种常用的设计模式,在面向对象编程中被广泛应用于创建对象。它通过提供一个统一的接口来创建一系列相关的或相互依赖的对象...

    三种设计模式(简单工厂_工厂方法_抽象工厂)

    抽象工厂模式是最为复杂的一种工厂模式,它提供了创建相关或依赖对象的家族,而无需指定它们的具体类。这种模式主要用于当产品族中的对象需要一起使用时,确保它们都属于同一产品等级结构。抽象工厂可以确保客户端...

    简单工厂模式、工厂模式、抽象工厂模式案例(C++实现)

    在这个压缩包中,包含了三种工厂模式的C++实现:简单工厂模式、工厂方法模式以及抽象工厂模式。让我们一一探讨这些模式。 1. 简单工厂模式: 简单工厂模式是一种静态工厂方法,它提供一个公共的工厂类来创建对象。...

    java常用设计模式-抽象工厂模式

    接下来,我们定义了一个抽象工厂类`AnimalFactory`,它有一个抽象方法`createAnimal()`,用于创建`Animal`对象。然后,我们定义了两个具体工厂类`CatFactory`和`DogFactory`,它们继承自`AnimalFactory`类,并实现了...

    抽象工厂模式uml类图

    java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式

    工厂方法模式和抽象工厂模式的区别

    工厂方法模式和抽象工厂模式是两种常见的设计模式,它们都属于创建型模式,用于解决对象的创建问题。在软件设计中,这两种模式都是用来隔离对象的创建和使用,以提高系统的灵活性和可扩展性。 首先,工厂方法模式的...

    抽象工厂模式+工厂方法模式+策略模式+类图实现手机加工厂

    在手机加工厂的案例中,类图可以描绘出抽象工厂、具体工厂、手机产品类以及各种策略类之间的关系,帮助开发者更好地理解和设计系统。 综上所述,抽象工厂模式用于创建品牌相关的手机生产线,工厂方法模式细化到具体...

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

    抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...

    工厂模式(简单工厂,普通工厂,抽象工厂)代码java

    工厂模式分为三种主要类型:简单工厂模式、普通工厂模式(也称为工厂方法模式)和抽象工厂模式。 1. **简单工厂模式**: - 简单工厂模式中,有一个中心工厂类,它负责根据输入条件(通常是一个参数)来创建具体的...

    抽象工厂模式+反射技术(抽象工厂模式+简单工厂模式)

    在某些情况下,我们可以将简单工厂作为抽象工厂的一个实现,或者在系统初期使用简单工厂,随着系统复杂性的增加逐步过渡到抽象工厂模式。 至于“仅仅是抽象工厂模式”,这意味着设计完全围绕着抽象工厂模式进行,...

    JAVA设计模式研究之抽象工厂模式

    在JAVA中实现抽象工厂模式,首先需要定义一个抽象工厂类,该类包含多个抽象方法,每个方法返回不同类型的产品。然后,为每种产品族定义具体的工厂类,这些工厂类实现抽象工厂接口,创建相应的产品族。接下来,定义...

    c#工厂模式——简单工厂,抽象工厂,单件模式实例

    C#中的工厂模式分为简单工厂、抽象工厂和单例模式三种,每一种都有其特定的应用场景和优势。 1. **简单工厂模式**: 简单工厂模式是一种静态工厂方法,它创建一个具体的对象而无需暴露创建逻辑。在C#中,我们可以...

Global site tag (gtag.js) - Google Analytics