Skip to content

Commit 22bb6cf

Browse files
author
Liu Yuning
committed
add builder DP
1 parent 8bb1706 commit 22bb6cf

File tree

7 files changed

+140
-1
lines changed

7 files changed

+140
-1
lines changed

README.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,14 @@ Java代码积累
88
## using containers
99
- [利用迭代器实现反转](./src/containers/Reverse.java)
1010
## design pattern
11-
- [简单工厂模式](./src/designpattern/factory/Calculator.java)
11+
- [简单工厂模式](./src/designpattern/factory/simple/Calculator.java)
1212
- [策略模式](./src/designpattern/strategy/StrategyClient.java)
1313
- [装饰模式](./src/designpattern/decorator/DecoratorClient.java)
14+
- [代理模式](./src/designpattern/delegation/ProxyClient.java)
15+
- [工厂方法模式](./src/designpattern/factory/method/FactoryClient.java)
16+
- [模板方法模式](./src/designpattern/template/TemplateClient.java)
17+
- [外观模式](./src/designpattern/facade/FacadeClient.java)
18+
- [建造者模式](./src/designpattern/builder/BuilderClient.java)
1419

1520
## concurrency
1621
- [演示线程的生命周期](./src/concurrency/ThreadLifeCycle.java)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package designpattern.builder;
2+
3+
public abstract class Builder {
4+
public abstract void buildPartA();
5+
6+
public abstract void buildPartB();
7+
8+
public abstract Product getBuildResult();
9+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package designpattern.builder;
2+
3+
/**
4+
* 建造客户端
5+
*
6+
* @author liu yuning
7+
*
8+
*/
9+
public class BuilderClient {
10+
11+
public static void main(String[] args) {
12+
Director director = new Director();
13+
Builder builder1 = new ConcreteBuilder1();
14+
Builder builder2 = new ConcreteBuilder2();
15+
16+
director.construct(builder1);
17+
Product product1 = builder1.getBuildResult();
18+
product1.show();
19+
20+
director.construct(builder2);
21+
Product product2 = builder2.getBuildResult();
22+
product2.show();
23+
24+
}
25+
26+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package designpattern.builder;
2+
3+
/**
4+
* 具体建造者类
5+
*
6+
* @author liu yuning
7+
*
8+
*/
9+
public class ConcreteBuilder1 extends Builder {
10+
11+
private Product product = new Product();
12+
13+
@Override
14+
public void buildPartA() {
15+
product.add("部件A");
16+
}
17+
18+
@Override
19+
public void buildPartB() {
20+
product.add("部件B");
21+
}
22+
23+
@Override
24+
public Product getBuildResult() {
25+
return product;
26+
}
27+
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package designpattern.builder;
2+
3+
/**
4+
* 具体建造者类,建造的对象时Product,通过build使Product完善
5+
*
6+
* @author liu yuning
7+
*
8+
*/
9+
public class ConcreteBuilder2 extends Builder {
10+
11+
private Product product = new Product();
12+
13+
@Override
14+
public void buildPartA() {
15+
product.add("部件X");
16+
}
17+
18+
@Override
19+
public void buildPartB() {
20+
product.add("部件Y");
21+
}
22+
23+
@Override
24+
public Product getBuildResult() {
25+
return product;
26+
}
27+
28+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package designpattern.builder;
2+
3+
/**
4+
* 指挥者类,用来指挥建造过程
5+
*
6+
* @author liu yuning
7+
*
8+
*/
9+
public class Director {
10+
11+
public void construct(Builder builder) {
12+
builder.buildPartA();
13+
builder.buildPartB();
14+
}
15+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package designpattern.builder;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* 产品类,由多个部件组成
8+
*
9+
* @author liu yuning
10+
*
11+
*/
12+
public class Product {
13+
List<String> parts = new ArrayList<String>();
14+
15+
// 添加产品部件
16+
public void add(String part) {
17+
parts.add(part);
18+
}
19+
20+
// 列举所有的产品部件
21+
public void show() {
22+
System.out.println("---产品 创建---");
23+
24+
for (String part : parts) {
25+
System.out.println(part);
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)