(Abstract Factory)抽象工厂模式的Java实现

简介:
抽象工厂模式( Abstract Factory ):为创建一组相关或者互相依赖的对象提供一个接口,而无需指定它们对应的具体类。
通用类图如下:
例如,我们现在有两种产品 AB,而产品AB分别都有两个厂商12进行生产,在这里我们把不同的厂商1、厂商2理解为牌子1和牌子2,那么厂商1就生产A1B1,厂商2生产A2B2
此时,不同的厂商肯定要生产自己的产品(如A1B1),每个厂商都有自己的一系列产品,这就与上面抽象工厂模式的描述类似了。
该例子的类图如下:
具体代码实现如下:
//定义不同的产品之间的一定具备的标准,用 interface实现 
//其中的method()方法可看作提取出不同产品的共性,如手机都有类似的功能 
interface IProductA{ 
   public  void method(); 


interface IProductB{ 
   public  void method(); 


//实现了产品标准实现的一系列具体产品 
//由于已经设计好A1由厂商1生产,故以下输出代码有“厂商x” 
class ProductA1  implements IProductA{ 
   public  void method() { 
    System.out.println( "厂商1    生产ProductA1 ..."); 
  } 


class ProductA2  implements IProductA{ 
   public  void method() { 
    System.out.println( "厂商2    生产ProductA2 ..."); 
  } 


class ProductB1  implements IProductB{ 
   public  void method() { 
    System.out.println( "厂商1    生产ProductB1 ..."); 
  } 


class ProductB2  implements IProductB{ 
   public  void method() { 
    System.out.println( "厂商2    生产ProductB2 ..."); 
  } 


//每一种牌子的产品生产工厂,即不同的厂商负责自己牌子产品的生产 
abstract  class Factory1{ 
   abstract IProductA getProductA1(); 
   abstract IProductB getProductB1(); 


abstract  class Factory2{ 
   abstract IProductA getProductA2(); 
   abstract IProductB getProductB2(); 


//具体的工厂用来生产相关的产品 
class ConcreteFactory1  extends Factory1{ 
   public IProductA getProductA1() { 
     return  new ProductA1(); 
  } 
   public IProductB getProductB1() { 
     return  new ProductB1(); 
  } 


class ConcreteFactoryB  extends Factory2{ 
   public IProductA getProductA2() { 
     return  new ProductA2(); 
  } 
   public IProductB getProductB2() { 
     return  new ProductB2(); 
  } 


//测试类 
public  class Client { 
   public  static  void main(String[] args) { 
     //厂商1负责生产产品A1、B1 
    Factory1 factory1 =  new ConcreteFactory1(); 
    IProductA productA1 = factory1.getProductA1(); 
    IProductB productB1 = factory1.getProductB1(); 
     
    productA1.method(); 
    productB1.method(); 
     
     //厂商2负责生产产品A2、B2 
    Factory2 factory2 =  new ConcreteFactoryB(); 
    IProductA productA2 = factory2.getProductA2(); 
    IProductB productB2 = factory2.getProductB2(); 
     
    productA2.method(); 
    productB2.method(); 
  } 
}
运行结果:
厂商1  生产ProductA1 ...
厂商1  生产ProductB1 ...
厂商2  生产ProductA2 ...
厂商2  生产ProductB2 ...
 
其实,上例中本来可以不用到了两个抽象工厂,只剩一个也可,但是这样子与我们现实生活中不同厂商各自生产自己的产品有点不同,所以就将其分开为两个了,也就是将两个厂商完全地分离开。
由上面类图可以知道,一旦任何一个厂商开发出了产品C的话,那么这个厂商肯定需要扩展自己的工厂来投入到C产品的生产中,那么此时工厂1和工厂2就需要进行一定的改变了,这很明显不符合开闭原则。


本文转自 xxxx66yyyy 51CTO博客,原文链接:http://blog.51cto.com/haolloyin/332802,如需转载请自行联系原作者
相关文章
|
2月前
|
Java
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
本文介绍了Java中抽象类和抽象方法的使用,以及ArrayList的基本操作,包括添加、获取、删除元素和判断列表是否为空。
27 2
java基础(12)抽象类以及抽象方法abstract以及ArrayList对象使用
|
6月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
|
6月前
|
设计模式 Java
Java一分钟之-设计模式:工厂模式与抽象工厂模式
【5月更文挑战第17天】本文探讨了软件工程中的两种创建型设计模式——工厂模式和抽象工厂模式。工厂模式提供了一个创建对象的接口,延迟实例化到子类决定。过度使用或违反单一职责原则可能导致问题。代码示例展示了如何创建形状的工厂。抽象工厂模式则用于创建一系列相关对象,而不指定具体类,但添加新产品可能需修改现有工厂。代码示例展示了创建颜色和形状的工厂。根据需求选择模式,注意灵活性和耦合度。理解并恰当运用这些模式能提升代码质量。
63 2
|
2月前
|
设计模式 Java
Java设计模式-抽象工厂模式(5)
Java设计模式-抽象工厂模式(5)
|
3月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
42 1
|
3月前
|
设计模式 XML 存储
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
文章详细介绍了抽象工厂模式,这是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而不指定它们具体的类。通过代码示例和结构图,文章展示了抽象工厂模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了如何通过配置文件和反射机制实现工厂的动态创建。
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
|
6月前
|
设计模式 Java
Java 设计模式:工厂模式与抽象工厂模式的解析与应用
【4月更文挑战第27天】设计模式是软件开发中用于解决常见问题的典型解决方案。在 Java 中,工厂模式和抽象工厂模式是创建型模式中非常核心的模式,它们主要用于对象的创建,有助于增加程序的灵活性和扩展性。本博客将详细介绍这两种模式的概念、区别以及如何在实际项目中应用这些模式。
45 1
|
6月前
|
Java
【JAVA学习之路 | 提高篇】抽象类与抽象方法(abstract)
【JAVA学习之路 | 提高篇】抽象类与抽象方法(abstract)
|
5天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
|
4天前
|
安全 Java 开发者
Java 多线程并发控制:深入理解与实战应用
《Java多线程并发控制:深入理解与实战应用》一书详细解析了Java多线程编程的核心概念、并发控制技术及其实战技巧,适合Java开发者深入学习和实践参考。
下一篇
无影云桌面