Skip to content

Commit 16f164a

Browse files
LIANGLINJIANG888LIANGLINJIANG888
authored andcommitted
docs: 更新12306专栏文章
1 parent 5b3f90e commit 16f164a

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# **Builder模式在项目设计中的应用**
2+
3+
## Builder模式简介:
4+
构建者模式(Builder Pattern)是一种对象创建型设计模式,它提供了一种灵活的解决方案,用于在创建复杂对象时将构造过程与其表示分离,以便相同的构建过程可以创建不同的表示。这种模式通常用于那些具有多个组成部分且这些部分经常变化的场景中,例如创建一个复杂的用户界面或一个多步骤的复杂算法。
5+
6+
### 构建者模式的应用场景
7+
8+
构建者模式适用于以下几种情况:
9+
10+
- 1. **对象构造复杂**:当一个对象的构建比较复杂时,可以使用构建者模式将复杂对象的构建过程抽象出来,是的这个抽象过程和具体的产品类分离,使得客户端不需要知道其具体的构建细节。
11+
- 2. **对象内部构建有多个步骤**:如果一个对象有多个构建步骤,并且希望允许用户以任意顺序提供这些步骤的信息,那么可以使用构建者模式来提供更灵活的构建过程。
12+
- 3. **对象构建需要多个简单对象组合**:如果一个对象是由多个简单的对象组合而成,而这些简单的对象又有不同的组合方式和可选的组合项,构建者模式可以帮助简化这种组合逻辑。
13+
- 4. **构建与表示分离**:当需要将一个复杂对象的构建过程与其最终表示分离时,构建者模式可以将这两个方面解耦,使得同样的构建过程可以创建出不同的表示。
14+
15+
### 构建者模式的实现
16+
17+
构建者模式通常包括以下几个角色:
18+
19+
- 1. **Builder**:为创建一个Product对象的各个部件指定抽象接口,具体构建者实现该接口以构造和装配该产品的各个部件。
20+
- 2. **ConcreteBuilder**:实现Builder接口,构建和装配各个部分,最终返回一个构造完毕的Product对象。
21+
- 3. **Director**:负责按照特定顺序组装各个部件,并返回一个构建好的实例或者使用构建者实例来构建最终的对象。
22+
- 4. **Product**:是最终被构建出来的复杂对象。
23+
24+
#### 示例代码
25+
26+
下面是12306项目中展示使用构建者模式的案例。
27+
28+
```java
29+
//产品
30+
31+
// 构建者角色
32+
/**
33+
* Builder 模式抽象接口
34+
*
35+
*/
36+
public interface Builder<T> extends Serializable {
37+
38+
/**
39+
* 构建方法
40+
*
41+
* @return 构建后的对象
42+
*/
43+
T build();
44+
}
45+
46+
// 具体构建者
47+
// todo
48+
49+
// 指导者角色
50+
// todo
51+
52+
// 实际业务场景使用
53+
//todo
54+
55+
```
56+
57+
### 构建者模式的优点与缺点
58+
59+
**优点:**
60+
- **封装性良好**:客户端无需了解产品内部的组成细节,只需要知道如何通过构建者来构造它即可。
61+
- **易于扩展**:可以通过增加新的具体构建者来轻松扩展系统,而不影响其他代码。
62+
- **分步构建,链式调用**:可以在构建过程中逐步完成,也可以采用链式调用的方式,提高易用性和可读性。
63+
64+
**缺点:**
65+
- **设计相对复杂**:相比直接使用构造函数或工厂方法创建对象,构建者模式的设计更为复杂。
66+
- **违反单一职责原则**:构建者除了构建产品的职责外,还需要知道如何一步步构建,这增加了其职责。
67+
- **对象创建成本高**:因为构建者的设计和实现较为复杂,所以相比于直接创建对象,构建者模式可能会增加额外的时间和空间成本。
68+
69+
### 结论
70+
71+
构建者模式在创建复杂对象时非常有用,尤其是当对象的构建过程需要多个步骤,并且这些步骤可以灵活配置时。它提供了一个清晰的方式来组织和封装一个复杂对象的构建过程,同时保持了系统的灵活性和可扩展性。然而,它的复杂性可能不适合所有的场景,所以在决定使用构建者模式之前,应该仔细评估它带来的额外复杂度是否值得。

0 commit comments

Comments
 (0)