概念:将一个复杂对象的构建与他的表示分离,使得同样的创建过程,可以创建不同的表示。
为什么要这样做:
案例:
“白龙马蹄朝西,伏着唐三藏,跟着三徒弟,西天取经不容易,一行就是几万里”,
此时,我们自己是导演,我们需要自己来给唐三藏配置徒弟。
解决方案:
我的理解:
与工厂模式有什么区别:可以理解为工厂是生产产品,而建造早死创建产品,利用工厂来获得的,肯定是加工过后的产品,而创建者,却是在拿部件组建产品
解耦过程和部件
试用场景:
1.对象的构造过程允许对象有不同的表示。
2.创建复杂对象的算法独立于该对象的组成部位和组成方式。
class Pupil{
private String species;
private String weapons;
private String skill;
public String getSpecies() {
return species;
}
public void setSpecies(String species) {
this.species = species;
}
public String getWeapons() {
return weapons;
}
public void setWeapons(String weapons) {
this.weapons = weapons;
}
public String getSkill() {
return skill;
}
public void setSkill(String skill) {
this.skill = skill;
}
}
abstract class PupilBuilder {
public Pupil pupil;
//定义徒弟物种
abstract void builderSpecies();
//定义徒弟武器
abstract void builderWeapons();
//定义徒弟技能
abstract void builderSkill();
//允许别人收自己作为徒弟
public Pupil getResult(){
builderSpecies();
builderWeapons();
builderSkill();
return this.pupil;
};
}
class MonkeyKingBuilder extends PupilBuilder{
@Override
public void builderSkill() {
// TODO Auto-generated method stub
this.pupil.setSkill("72变化");
}
@Override
public void builderSpecies() {
// TODO Auto-generated method stub
this.pupil.setSpecies("灵长类动物");
}
@Override
public void builderWeapons() {
// TODO Auto-generated method stub
this.pupil.setWeapons("金箍棒");
}
}
class PigKing extends PupilBuilder{
@Override
void builderSkill() {
// TODO Auto-generated method stub
this.pupil.setSkill("好迟懒做调节气氛");
}
@Override
void builderSpecies() {
// TODO Auto-generated method stub
this.pupil.setSpecies("猪");
}
@Override
void builderWeapons() {
// TODO Auto-generated method stub
this.pupil.setWeapons("九齿钉耙");
}
}
//这里还有沙僧和小白龙,就不一一都写出来了。现在我们开始要将这些徒弟放到剧本中的角色里
class Director{
public PupilBuilder builder = null;
public Director(PupilBuilder builder){
this.builder = builder;
}
public Pupil createPupil(){
return this.builder.getResult();
}
}
public class XiYouJi{
public static void main(String args[]){
PupilBuilder mokey = new MonkeyKingBuilder();
PupilBuilder pig = new PigKing();
Director d = new Director(mokey);
d.createPupil().toString();
d = new Director(pig);
d.createPupil().toString();
}
}