23种设计模式之工厂模式
目录
简单工厂模式
工厂方法模式
示例
应用场景
简单工厂模式
简单工厂模式的核心是将产品的创建过程封装在一个工厂类中,把创建对象的流程集中在这个工厂类中。简单工厂模式包括三个主要角色,工厂类,抽象产品,具体产品。
- 抽象产品:一个接口,描述产品的通用行为
- 具体产品:实现抽象产品或继承抽象产品类
- 工厂类:负责创建产品,根据传递的不同参数创建不同的产品
简单工厂模式简化了客户端的操作,客户端可以调用工厂方法来获取具体产品,而无需直接与具体产品类接触,降低了耦合,但是不够灵活,如果需要添加新的产品就需要修改工厂类的代码。
工厂方法模式
简单工厂模式只有一个工厂类,负责创建所有的产品,如果需要添加新的产品,通常需要修改工厂类的代码。而工厂方法模式引入了抽象工厂和具体工厂的概念,每个具体工厂只负责创建一个具体产品,添加新的产品只需要添加新的工厂类而无需修改原来的代码。
- 抽象工厂:一个接口,包含一个抽象的工厂方法。
- 具体工厂:实现抽象工厂接口,创建具体产品。
- 抽象产品:定义产品的接口。
- 具体产品:实现抽象产品接口,是工厂创建的对象。
示例
下面是工厂方法模拟的示例代码:
// 抽象产品 形状
interface Shape {
void draw();
}
//具体产品 圆
class Circle implements Shape{
@Override
public void draw() {
System.out.println("Circle");
}
}
//抽象工厂
interface ShapeFactory{
Shape createShape();
}
//具体工厂
class CircleFactory implements ShapeFactory{
@Override
public Shape createShape() {
return new Circle();
}
}
public class demo {
public static void main(String[] args) {
ShapeFactory circleFactory=new CircleFactory();
Shape circle=new Circle();
circle.draw();
}
}
应用场景
工厂方法模式使得每个工厂类的职责单一,每个工厂只负责创建一种产品,当创建对象涉及一系列复杂的初始化逻辑,而这些逻辑在不同的子类中可能有所不同时,可以使用工厂模式将这些初始化逻辑封装在子类的工厂中。