设计模式-建造者模式

概述

建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离。

应用场景

建造者(Builder)模式创建的是复杂对象,其产品的各个部分经常面临着剧烈的变化,但将它们组合在一起的算法却相对稳定,所以它通常在以下场合使用。

  • 创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的。
  • 创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。

AndroidNetty-protobuf 中对象的创建使用了大量的建造者模式

实现

这里模拟任务的创建, 任务的创建需要任务数据、任务策略、缓存策略等.

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/**
* @author 当我遇上你
* @公众号 当我遇上你
* @since 2020-06-13
*/
@Slf4j
public class Task implements Runnable {

private CacheService cacheService;

private StrategyService strategyService;

private RepositoryService repositoryService;

private Task(CacheService cacheService, StrategyService strategyService, RepositoryService repositoryService) {
this.cacheService = cacheService;
this.strategyService = strategyService;
this.repositoryService = repositoryService;
}

@Override
public void run() {
log.info("task is running...");
}



public static Builder builder() {
return new Task.Builder();
}

public static class Builder {

private CacheService cacheService;

private StrategyService strategyService;

private RepositoryService repositoryService;

public Builder() {
}

public Builder setCacheService(CacheService cacheService) {
this.cacheService = cacheService;
return this;
}

public Builder setStrategyService(StrategyService strategyService) {
this.strategyService = strategyService;
return this;
}

public Builder setRepositoryService(RepositoryService repositoryService) {
this.repositoryService = repositoryService;
return this;
}

public Task build() {
return new Task(cacheService, strategyService, repositoryService);
}
}


public static void main(String[] args) {

CacheService cacheService = new CacheService();
StrategyService strategyService = new StrategyService();
RepositoryService repositoryService = new RepositoryService();

Task task = Task.builder()
.setCacheService(cacheService)
.setStrategyService(strategyService)
.setRepositoryService(repositoryService)
.build();

}
}

最后

本文到此结束,感谢阅读。如果您觉得不错,请关注公众号【当我遇上你】,您的支持是我写作的最大动力。