Java工厂方法模式
Java工厂方法模式是一种创建型模式,它属于类的创建型模式。该模式的主要思想是,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实体化哪一个类。
工厂方法模式的结构:
* 抽象工厂(Creator):是工厂方法模式的核心,负责定义创建抽象产品对象的工厂方法。
* 具体工厂(Concrete Creator):是工厂方法模式的对外接口,负责实现创建具体产品对象的内部逻辑。
* 抽象产品(Product):是工厂方法模式所创建的所有对象的父类,负责描述所有具体产品共有的公共接口。
* 具体产品(Concrete Product):是工厂方法模式的创建目标,所有创建的对象都是充当这一角色的某个具体类的实例。
工厂方法模式的优点是能够使客户端独立于产品的创建过程,并且在系统中引入新产品时无需对客户端进行修改。同时,工厂方法模式也可以避免简单工厂模式的缺点,即当有新产品要加入到系统中时,必须对工厂类进行修改,以加入必要的处理逻辑。
工厂方法模式适合在如下场合中运用:
* 当无法得知必须创建的对象属于哪个类的时候。
* 当一个类希望由它的子类来决定所创建的对象的时候。
* 当创建对象的职责被委托给多个帮助子类时。
工厂方法模式的代码示例:
```
# 抽象工厂
from abc import ABC, abstractmethod
class Creator(ABC):
@abstractmethod
def factory_method(self):
pass
# 具体工厂
class ConcreteCreator1(Creator):
def factory_method(self):
return ConcreteProduct1()
class ConcreteCreator2(Creator):
def factory_method(self):
return ConcreteProduct2()
# 抽象产品
class Product(ABC):
@abstractmethod
def operation(self):
pass
# 具体产品
class ConcreteProduct1(Product):
def operation(self):
return "ConcreteProduct1"
class ConcreteProduct2(Product):
def operation(self):
return "ConcreteProduct2"
```
在上述代码中,我们定义了抽象工厂`Creator`、具体工厂`ConcreteCreator1`和`ConcreteCreator2`、抽象产品`Product`、具体产品`ConcreteProduct1`和`ConcreteProduct2`。客户端可以通过具体工厂来创建具体的产品对象,而不需要关心具体的实现细节。