Java 最常见面试题:简单工厂和抽象工厂有什么区别?

简介: Java 最常见面试题:简单工厂和抽象工厂有什么区别?

简单工厂模式:

这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况(这样工厂类才不用经常更改)。

它由三种角色组成:
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Driver类。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的Car接口。
具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现,如例子中的Benz、Bmw类。

来用类图来清晰的表示下的它们之间的关系:
image.png
抽象工厂模式
先来认识下什么是产品族: 位于不同产品等级结构中,功能相关联的产品组成的家族。
image.png
图中的BmwCar和BenzCar就是两个产品树(产品层次结构);而如图所示的BenzSportsCar和BmwSportsCar就是一个产品族。他们都可以放到跑车家族中,因此功能有所关联。同理BmwBussinessCar和BenzBusinessCar也是一个产品族。

可以这么说,它和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且抽象工厂模式是三个里面最为抽象、最具一般性的。抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象。

而且使用抽象工厂模式还要满足一下条件:

系统中有多个产品族,而系统一次只可能消费其中一族产品

同属于同一个产品族的产品以其使用。

来看看抽象工厂模式的各个角色(和工厂方法的如出一辙):

抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。

具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。在java中它由具体的类来实现。

抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。

具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

相关文章
|
4月前
|
设计模式 Java
java工厂模式和抽象工厂模式的区别是什么?
java工厂模式和抽象工厂模式的区别是什么?
261 1
|
设计模式 存储 缓存
Java中的抽象类、接口、设计模式、包装类和泛型(附带相关面试题)
一.抽象类(abstract),二.接口(interface),三.设计模式,四.包装类,五.泛型
328 0
|
3月前
|
设计模式 Java
设计模式-抽象工厂(JAVA)
设计模式-抽象工厂(JAVA)
|
4月前
|
设计模式 Java
Java 设计模式:工厂模式与抽象工厂模式的解析与应用
【4月更文挑战第27天】设计模式是软件开发中用于解决常见问题的典型解决方案。在 Java 中,工厂模式和抽象工厂模式是创建型模式中非常核心的模式,它们主要用于对象的创建,有助于增加程序的灵活性和扩展性。本博客将详细介绍这两种模式的概念、区别以及如何在实际项目中应用这些模式。
40 1
|
4月前
|
设计模式 Java 程序员
Java中的工厂方法模式
Java中的工厂方法模式
32 0
|
10月前
|
设计模式 Java Maven
你不能不了解的Java23中设计模式之【抽象工厂模式】
你不能不了解的Java23中设计模式之【抽象工厂模式】
|
设计模式 安全 Java
Java 设计模式之单例设计模式(八种实现方法)的详解
Java 设计模式之单例设计模式(八种实现方法)的详解
56 0
|
Java
【java面试题】- java接口和抽象类共同点和区别?
java接口和抽象类共同点和区别?
104 0
|
Java
Java 最常见面试题:简单工厂和抽象工厂有什么区别?
Java 最常见面试题:简单工厂和抽象工厂有什么区别?
148 0
Java 最常见面试题:简单工厂和抽象工厂有什么区别?
|
设计模式 Java 开发者
Java中23种设计模式之静态工厂方法
Java中23种设计模式之静态工厂方法
208 0