工厂模式

  1. 0x00 工厂模式
  2. 0x01 示例
    1. 类图:
    2. 代码:
  3. 0x02 总结

0x00 工厂模式

工厂模式提供了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类中进行。

工厂方法模式的基本结构包括以下几个部分:

  • 抽象产品(Product): 定义了产品的接口,它是所有具体产品的公共父类或接口。
  • 具体产品(Concrete Product): 实现了抽象产品接口的具体类。
  • 抽象工厂(Creator): 定义了工厂接口,声明了一个或多个工厂方法,用于创建具体产品。
  • 具体工厂(Concrete Creator): 实现了抽象工厂接口,包含了具体的产品实现逻辑。

0x01 示例

假设我们有一个图形绘制应用,我们需要创建不同类型的图形,如圆形(Circle)、矩形(Rectangle)等。

类图:

classDiagram
class ClientApp{
    + main(String[] args)
}
class Shape {
    +draw()
}

class Circle {
    +draw()
}

class Rectangle {
    +draw()
}

class ShapeFactory {
    +getShape(): Shape
}

class RoundedRectangleFactory {
    +getShape(): Shape
}


ClientApp..|>Shape
ClientApp..|>ShapeFactory
Shape <|-- Circle
Shape <|-- Rectangle
ShapeFactory <|-- RoundedRectangleFactory
Circle<|..RoundedRectangleFactory
Rectangle<|..RoundedRectangleFactory
Shape<|..ShapeFactory

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 抽象产品
public interface Shape {
void draw();
}

// 具体产品
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a circle.");
}
}

public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a rectangle.");
}
}
// 定义抽象工厂
public abstract class ShapeFactory {
public abstract Shape getShape(String shapeType);
}
// 创建具体工厂类
public class RoundedRectangleFactory extends ShapeFactory {
@Override
public Shape getShape(String shapeType) {
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}
return null;
}
}
// 使用工厂
public class ClientApp {
public static void main(String[] args) {
ShapeFactory factory = new RoundedRectangleFactory();

Shape shape1 = factory.getShape("CIRCLE");
shape1.draw();

Shape shape2 = factory.getShape("RECTANGLE");
shape2.draw();
}
}

0x02 总结

不同于常规的 声明对象=new 类 的方式.通过工厂模式可以通过参数来创建对象.动态的创建对象.

文章标题:工厂模式

本文作者:zhu8fei

发布时间:2024-08-13, 16:59:36

最后更新:2024-08-16, 17:36:25

原始链接:http://www.zhu8fei.com/2024/08/13/factory-method-pattern.html

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zhu8fei@163.com

目录
×

喜欢就点赞,疼爱就打赏