Builder设计模式一般会采用链式编程结构
案例分析?
构建一台电脑(内存、CPU、显卡等等.....)
内存:ram(运行内存)和rom(非运行内存)
分为了一些角色
Builder-->抽象类(规范产品组装)-->案例中Builder接口
ConcrateBuilder-->具体组装产品类-->案例MacBookProBuilder
Product--->具体的产品-->案例Computer
Director-->统一组装-->案例Director
UML结构
关联关系:没有你我可以生存,你没有我同样可以生存
聚合关系:没有你我可以生存,你没有我就不可以生存
组合关系:没有你我不能生存,你没有我同样不能生存
项目结构:
package com.example.builder:
package com.example.builder;
/**
* 抽象Builder类(规范产品)
*
*/
public interface Builder {
// 内存
public Builder setMemory(String memory);
// cpu
public Builder setCpu(String cpu);
// 显卡
public Builder setDisplay(String display);
// 系统
public Builder setOs(String os);
/**
* 构建电脑
* @return
*/
public Computer build();
}
package com.example.builder;
/**
* 电脑
*/
public class Computer {
// 内存
private String memory;
// CPU
private String cpu;
// 显卡
private String display;
// 系统
private String os;
public Computer() {
super();
}
public Computer(String memory, String cpu, String display, String os) {
super();
this.memory = memory;
this.cpu = cpu;
this.display = display;
this.os = os;
}
public String getMemory() {
return memory;
}
public void setMemory(String memory) {
this.memory = memory;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getDisplay() {
return display;
}
public void setDisplay(String display) {
this.display = display;
}
public String getOs() {
return os;
}
public void setOs(String os) {
this.os = os;
System.out.println("电脑类型:" + os);
}
@Override
public String toString() {
return "Computer [memory=" + memory + ", cpu=" + cpu + ", display="
+ display + ", os=" + os + "]";
}
}
package com.example.builder;
/**
* 组装电脑
*
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
/**
* 构建电脑
*
* @param memory
* @param cpu
* @param display
* @param os
*/
public void computerDirector(String memory, String cpu, String display,
String os) {
this.builder.setMemory(memory);
this.builder.setCpu(cpu);
this.builder.setDisplay(display);
this.builder.setOs(os);
}
}
package com.example.builder:
package com.example.builder;
/**
* 组装电脑
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
/**
* 构建电脑
*
* @param memory
* @param cpu
* @param display
* @param os
*/
public void computerDirector(String memory, String cpu, String display,
String os) {
this.builder.setMemory(memory);
this.builder.setCpu(cpu);
this.builder.setDisplay(display);
this.builder.setOs(os);
}
}
package com.example.builder.test:
package com.example.builder.test;
import com.example.builder.Builder;
import com.example.builder.Director;
import com.example.builder.impl.MacBookProBuilder;
/**
* 客户端
*/
public class Test {
public static void main(String[] args) {
Builder builder = new MacBookProBuilder();
builder.setCpu("").setDisplay("").setMemory("").setOs("").build();
Director director = new Director(builder);
director.computerDirector("16 GB 1867 MHz DDR3",
"3.1 GHz Intel Core i7", "Intel Iris Graphics 6100 1536 MB", "10.11.5 (15F34)");
System.out.println(builder.build().toString());
}
}
运行结果:
苹果电脑cpu:
苹果电脑display:
苹果电脑memory:
电脑类型:
苹果电脑os:
苹果电脑memory:16 GB 1867 MHz DDR3
苹果电脑cpu:3.1 GHz Intel Core i7
苹果电脑display:Intel Iris Graphics 6100 1536 MB
电脑类型:10.11.5 (15F34)
苹果电脑os:10.11.5 (15F34)
Computer [memory=16 GB 1867 MHz DDR3, cpu=3.1 GHz Intel Core i7, display=Intel Iris Graphics 6100 1536 MB, os=10.11.5 (15F34)]
整理自ppt