一、需求分析
1) 需要建房子:这一过程为打桩、 砌墙、封顶
2) 房子有各种各样的,比如普通房,高楼,别墅,各种房子的过程虽然一样,但是要求不要相同的.
二、代码实现
1、UML 类图
2、代码实现
1 public abstract class AbstractHouse {
2
3 //打地基
4 public abstract void buildBasic();
5 //砌墙
6 public abstract void buildWalls();
7 //封顶
8 public abstract void roofed();
9
10 public void build() {
11 buildBasic();
12 buildWalls();
13 roofed();
14 }
15 }
16
17 ------------------------------------------------
18 /**
19 * 普通房子
20 */
21 public class CommonHouse extends AbstractHouse{
22 @Override
23 public void buildBasic() {
24 System.out.println(" 普通房子打地基 ");
25 }
26
27 @Override
28 public void buildWalls() {
29 System.out.println(" 普通房子砌墙 ");
30 }
31
32 @Override
33 public void roofed() {
34 System.out.println(" 普通房子封顶 ");
35 }
36 }
37 ------------------------------------------------
38 public class HigeHouse extends AbstractHouse {
39 @Override
40 public void buildBasic() {
41 System.out.println(" 高楼打地基 ");
42 }
43
44 @Override
45 public void buildWalls() {
46 System.out.println(" 高楼砌墙 ");
47 }
48
49 @Override
50 public void roofed() {
51 System.out.println(" 高楼封顶 ");
52 }
53 }
测试代码:
1 /**
2 * 传统方式解决盖房需求问题分析
3 * 1) 优点是比较好理解,简单易操作。
4 * 2) 设计的程序结构,过于简单,没有设计缓存层对象,程序的扩展和维护不好. 也就
5 * 是说,这种设计方案,把产品(即:房子) 和 创建产品的过程(即:建房子流程) 封
6 * 装在一起,耦合性增强了。
7 * 3) 解决方案:将产品和产品建造过程解耦 => 建造者模式.
8 */
9 public class Client {
10 public static void main(String[] args) {
11 CommonHouse commonHouse = new CommonHouse();
12 commonHouse.build();
13
14 System.out.println("---------------");
15
16 HigeHouse higeHouse = new HigeHouse();
17 higeHouse.build();
18 }
19 }
三、分析
1、优点是比较好理解,简单易操作;
2、设计的程序结构,过于简单,没有设计缓存层对象,程序的扩展和维护不好;也就是说,这种设计方案,把产品(即:房子) 和 创建产品的过程(即:建房子流程) 封装在一起,耦合性增强了。
3、解决方案:将产品和产品建造过程解耦 =》建造者模式