所谓建造者模式就是将复杂对象的构建过程与其表示分离,使得同样的构建过程可以产生不同的表现形式。
例如我们玩游戏时玩家每次游戏可以选择玩不一样的英雄,而这些英雄会有共同的一些属性如,名称,等级,角色,我们每次不用管内部是如何构造英雄的,只需要拿到不同英雄就可以,简单看下的代码。
/**
* 英雄的实体
*/
public class Hero {
private String name;
private int grade;
private String role;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
@Override
public String toString() {
return "Hero{" +
"name='" + name + '\'' +
", grade=" + grade +
", role='" + role + '\'' +
'}';
}
}
/**
* 一个构建英雄属性的接口
*/
public interface Builder {
public void buildName();
public void buildGrade();
public void buildRole();
public Hero buildHero();
}
/**
* 设置亚索的英雄属性
*/
public class BuilderYaSuo implements Builder {
private Hero hero = new Hero();
@Override
public void buildName() {
hero.setName("亚索");
}
@Override
public void buildGrade() {
hero.setGrade(18);
}
@Override
public void buildRole() {
hero.setRole("刺客");
}
@Override
public Hero buildHero() {
return hero;
}
}
/**
* 设置劫的英雄属性
*/
public class BuilderJie implements Builder {
private Hero hero = new Hero();
@Override
public void buildName() {
hero.setName("劫");
}
@Override
public void buildGrade() {
hero.setGrade(18);
}
@Override
public void buildRole() {
hero.setRole("刺客");
}
@Override
public Hero buildHero() {
return hero;
}
}
/**
* 建造者
*/
public class Constructor {
public static Hero ConstructorHero(Builder builder){
builder.buildName();
builder.buildGrade();
builder.buildRole();
return builder.buildHero();
}
}
/**
* 召唤师选择英雄
*/
public class Summoner {
public static void main(String[] args) {
//召唤亚索
Hero h = Constructor.ConstructorHero(new BuilderYaSuo());
System.out.println(h.toString());
//召唤劫
Hero h1 = Constructor.ConstructorHero(new BuilderJie());
System.out.println(h1.toString());
}
}