定义
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
实用范围
1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2 当构造过程必须允许被构造的对象有不同表示时。
角色
在这样的设计模式中,有以下几个角色:
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口,把各个部件逐渐安装到产品上的过程
3 Director:构造一个使用Builder接口的对象。安装部件
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
例子
1.要制造的复杂对象
2.为创建一个产品对象的各个部件指定抽象接口
3.创建各个组件的过程
4.完成拼装
5测试
6测试结果
安装上屏幕
安装上手机壳
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
实用范围
1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2 当构造过程必须允许被构造的对象有不同表示时。
角色
在这样的设计模式中,有以下几个角色:
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口,把各个部件逐渐安装到产品上的过程
3 Director:构造一个使用Builder接口的对象。安装部件
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
例子
1.要制造的复杂对象
package com.builderpatter;
public class Phone {
private String shoujike;
private String pingmu;
public String getShoujike() {
return shoujike;
}
public void setShoujike(String shoujike) {
this.shoujike = shoujike;
}
public String getPingmu() {
return pingmu;
}
public void setPingmu(String pingmu) {
this.pingmu = pingmu;
}
}
2.为创建一个产品对象的各个部件指定抽象接口
package com.builderpatter;
public interface PhoneBuilder {
void buildShoujike();
void buildPingmu();
public Phone buildPhone();
}
3.创建各个组件的过程
public class PhoneBuilderInstance implements PhoneBuilder {
private Phone phone;
public PhoneBuilderInstance() {
phone = new Phone();
}
public void buildPingmu() {
// TODO Auto-generated method stub
phone.setShoujike("安装上手机壳");
}
public void buildShoujike() {
// TODO Auto-generated method stub
phone.setPingmu("安装上屏幕");
}
public Phone buildPhone() {
// TODO Auto-generated method stub
return phone;
}
}
4.完成拼装
package com.builderpatter;
public class PhoneDirector {
Phone phoneConstructor(PhoneBuilder pb) {
pb.buildPingmu();
pb.buildShoujike();
return pb.buildPhone();
}
}
5测试
public class Test {
public static void main(String[] args) {
PhoneBuilder pb = new PhoneBuilderInstance();
PhoneDirector pd = new PhoneDirector();
Phone p =pd.phoneConstructor(pb);
System.out.println(p.getPingmu());
System.out.println(p.getShoujike());
}
}
6测试结果
安装上屏幕
安装上手机壳