一、简单介绍
1、工厂方法模式和抽象工厂模式的概念
在这之前,还有一个简单工厂模式,但这不属于23种设计模式之中,实现也较简单,不再赘述。
- 工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定该实例化哪一个类,来达到将对象创建的过程封装的目的。
工厂方法模式的UML类图(来自网络):
- 抽象工厂模式(Abstract Factory):同样提供一个接口,用来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。
抽象工厂模式的UML类图(来自网络):
2、工厂方法模式和抽象工厂模式的区别
- 工厂方法模式:
- 一个抽象产品类,可以派生出多个具体产品类。
- 一个抽象工厂类,可以派生出多个具体工厂类。
- 每个具体工厂类只能创建一个具体产品类的实例。
- 抽象工厂模式:
- 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
- 一个抽象工厂类,可以派生出多个具体工厂类。
- 每个具体工厂类可以创建多个具体产品类的实例。
举个例子(可能不恰当,大佬勿喷…):
对于一个CPU产品类来说,就会有一个专门生产CPU的工厂,有一套CPU生产的方法。具体来说可能会有Intel、AMD、晓龙等多个工厂,但一个工厂只生产其对于品牌的CPU,这就是所谓的工厂方法模式。
而对于一部手机来说,它需要用到相机模块类、指纹模块类、主板类等多个部件类(产品族)组成。对于一个手机工厂,它要能同时生产这多个部件(即一个产品族),每个部件都有一套生产方法。而现在又有许许多多的手机品牌,每个品牌都有自己的生产方法,这用到的便是抽象工厂模式。
二、实现方法
1、工厂方法模式
interface Product {
void show();
}
interface Factory {
/**
* 工厂方法,由子类实现
*/
Product getProduct();
}
class Apple implements Product{
@Override
public void show() {
System.out.println("Apple");
}
}
class Pear implements Product{
@Override
public void show() {
System.out