抽象工厂模式
抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广。
抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定具体产品类型的情况下,创建多个产品族中的产品,这就是抽象工厂模式的用意。
每个模式都是针对一定问题的解决方案,抽象工厂模式面对的问题是多个产品等级结构的系统设计。
抽象工厂模式中涉及到两个概念:产品族和产品等级结构
产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族,比如:麦当劳和肯德基,这两个产品有不同的分店,北京有家麦当劳和肯德基店,上海也有家,北京的麦当劳和北京的肯德基组成一个产品族。
产品等级结构:北京的麦当劳和上海的麦当劳组成了一个产品等级结构。
示意图如下:
抽象工厂模式的结构
涉及到四个角色
1)抽象工厂角色:是抽象工厂方法模式的核心,与应用系统的商业逻辑无关。通过使用java接口或抽象类实现,而 所有的具体工厂类必须实现这个角色。
2)具体工厂角色:这个角色直接在客户端的调用下创建产品的实例,这个角色含有选择合适的产品对象的逻辑,通常使用
java类实现这个角色。
3)抽象产品角色:所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口,通常由java接口或抽象
类实现。
4)具体产品角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例,这是客户端最终需要的,通常由 java类实现。
/**
* 抽象产品角色
* @author Administrator
*
*/
public interface KfcBread
{
}
/**
* 具体产品角色
* @author Administrator
*
*/
public class ShangHaiKfc implements KfcBread
{
public ShangHaiKfc()
{
System.out.println("肯德基出生地:上海");
}
}
/**
* 具体产品角色
* @author Administrator
*
*/
public class BeiJingKfc implements KfcBread
{
public BeiJingKfc()
{
System.out.println("肯德基出生地:北京");
}
}
/**
* 抽象产品角色
* @author Administrator
*
*/
public interface McdBread
{
}
/**
* 具体产品角色
* @author Administrator
*
*/
public class ShangHaiMcd implements McdBread
{
public ShangHaiMcd()
{
System.out.println("麦当劳出生地:上海");
}
}
/**
* 具体产品角色
* @author Administrator
*
*/
public class BeiJingMcd implements McdBread
{
public BeiJingMcd()
{
System.out.println("麦当劳出生地:北京");
}
}
/**
* 抽象工厂角色
* @author Administrator
*
*/
public interface Toaster
{
KfcBread toastKFC();
McdBread toastMCD();
}
/**
* 具体工厂角色
* @author Administrator
*
*/
public class ShangHaiToaster implements Toaster
{
public KfcBread toastKFC()
{
return new ShangHaiKfc();
}
public McdBread toastMCD()
{
return new ShangHaiMcd();
}
}
/**
* 具体工厂角色
* @author Administrator
*
*/
public class BeiJingToaster implements Toaster
{
public KfcBread toastKFC()
{
return new BeiJingKfc();
}
public McdBread toastMCD()
{
return new BeiJingMcd();
}
}
/**
* 测试类
* @author Administrator
*
*/
public class client
{
public static void main(String[] args)
{
Toaster t1 = new BeiJingToaster();
Toaster t2 = new ShangHaiToaster();
McdBread mcd1 = t1.toastMCD();
McdBread mcd2 = t2.toastMCD();
KfcBread kfc1 = t1.toastKFC();
KfcBread kfc2 = t2.toastKFC();
}
}
分享到:
相关推荐
在"JAVA设计模式之抽象工厂模式"的示例中,可能会包含这些角色的实现以及如何在实际场景中应用抽象工厂模式的解释和示例代码。这个压缩包可能包含了详细的设计和实现,帮助学习者深入理解抽象工厂模式的工作原理及其...
java设计模式之抽象工厂模式实例,希望对大家有所帮助。
本文将深入探讨Java中的工厂模式,包括基本的工厂模式、抽象工厂模式以及工厂方法模式。 **工厂模式**:工厂模式的核心思想是提供一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。这样,客户端无需...
工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...
总结来说,Java设计模式之抽象工厂模式是一种用来创建一系列相关对象的设计模式,它通过提供抽象工厂接口来隔离具体产品的创建,使系统具备更好的扩展性和封装性。在实际开发中,我们可以根据需求选择使用抽象工厂...
在Java中,抽象工厂模式提供了一种创建对象组的方式,使得这些对象属于同一族,并且能够遵循相同的接口,但具体的实现可以不同。 首先,我们来理解一下抽象工厂模式的主要组成: 1. **抽象工厂(Abstract Factory...
在Java中,抽象工厂模式通常用于创建一组相关的或相互依赖的对象,而无需指定它们的具体类。这种模式的关键在于抽象工厂类,它定义了一组接口,用于创建不同产品族的实例。产品族是一组相关或相互依赖的对象,而产品...
工厂模式分为三种主要类型:简单工厂模式、普通工厂模式(也称为工厂方法模式)和抽象工厂模式。 1. **简单工厂模式**: - 简单工厂模式中,有一个中心工厂类,它负责根据输入条件(通常是一个参数)来创建具体的...
【JAVA设计模式研究之抽象工厂模式】 设计模式是软件工程中的重要概念,它们代表了在特定情境下解决常见问题的最佳实践。面向对象编程中的设计模式,如抽象工厂模式,是提高代码可重用性和可维护性的关键。抽象工厂...
抽象工厂模式是设计模式中的一种,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在软件工程中,当系统需要在运行时选择不同的产品族时,或者想要隔离具体产品的实现细节时,抽象工厂...
总的来说,这份压缩包提供了一个Java实现的抽象工厂模式实例,通过学习和理解这个例子,你可以深入掌握抽象工厂模式的原理和使用场景,这对于提升你的Java编程能力以及软件设计水平非常有帮助。在实际项目中,灵活...
**Java设计模式——抽象工厂** 在软件工程中,设计模式是一种在特定场景下解决常见问题的模板或蓝图。...通过学习抽象工厂模式,开发者可以更好地处理复杂的对象创建逻辑,提升软件的灵活性和可维护性。
在Java中,抽象工厂模式通常由以下几个主要组件构成: 1. **抽象工厂(Abstract Factory)**:定义一个创建对象的接口,但允许子类决定实例化哪一个类。抽象工厂本身并不实例化任何产品,而是由具体的工厂类来完成...
通过阅读《Java设计模式之抽象工厂模式.pdf》这份文档,你可以更深入地理解抽象工厂模式的原理、实现方式以及如何在Java项目中应用这一模式。文档中可能涵盖了模式的优缺点、实例分析、与其他设计模式的比较等内容,...
在Java编程中,抽象工厂模式常用于在多个相关产品对象之间建立关联,使得更换一个产品族变得简单,无需修改客户端代码。 在“java 图书展(抽象工厂模式)”这个主题下,我们可以深入探讨以下几个关键知识点: 1. ...
在C++和Java这两种编程语言中,抽象工厂模式的应用相当广泛,特别是在需要跨平台或者需要一组相关的对象协同工作时。 首先,我们来看看C++中的抽象工厂模式。在C++中,我们通常通过定义接口(纯虚函数)来实现抽象...
在Java中,抽象工厂模式通常由以下几个角色构成: 1. 抽象工厂(Abstract Factory):这是模式的核心,定义了一组创建对象的接口,客户通过这个接口请求创建所需的产品。在Java中,这通常是一个抽象类或接口。 2. ...
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式