面试题答案
一键面试Director类的主要职责
- 封装构建过程:Director类封装了复杂对象的构建过程。它知道构建一个完整对象需要哪些步骤,以及这些步骤的执行顺序。它并不关心具体的构建细节,这些细节由具体的Builder实现类负责。
- 调用Builder方法:Director通过调用Builder接口中定义的方法来逐步构建对象。它按照预先定义好的顺序调用这些方法,以确保对象构建的完整性和正确性。
示例说明
假设我们要构建一个复杂的游戏角色对象。游戏角色有名称、性别、职业、装备等多个属性。
- 定义Builder接口
public interface CharacterBuilder {
void buildName();
void buildGender();
void buildClass();
void buildEquipment();
GameCharacter getGameCharacter();
}
- 具体的Builder实现类
public class WarriorCharacterBuilder implements CharacterBuilder {
private GameCharacter gameCharacter = new GameCharacter();
@Override
public void buildName() {
gameCharacter.setName("Warrior1");
}
@Override
public void buildGender() {
gameCharacter.setGender("Male");
}
@Override
public void buildClass() {
gameCharacter.setClassType("Warrior");
}
@Override
public void buildEquipment() {
gameCharacter.setEquipment("Sword, Shield");
}
@Override
public GameCharacter getGameCharacter() {
return gameCharacter;
}
}
- 定义Director类
public class CharacterDirector {
private CharacterBuilder characterBuilder;
public CharacterDirector(CharacterBuilder characterBuilder) {
this.characterBuilder = characterBuilder;
}
public GameCharacter constructCharacter() {
characterBuilder.buildName();
characterBuilder.buildGender();
characterBuilder.buildClass();
characterBuilder.buildEquipment();
return characterBuilder.getGameCharacter();
}
}
- 使用场景
public class Main {
public static void main(String[] args) {
CharacterBuilder warriorBuilder = new WarriorCharacterBuilder();
CharacterDirector director = new CharacterDirector(warriorBuilder);
GameCharacter warrior = director.constructCharacter();
System.out.println(warrior);
}
}
在上述例子中,CharacterDirector
类协调了游戏角色对象的构建过程。它调用WarriorCharacterBuilder
的各个方法,按照一定顺序构建游戏角色的各个部分,最终返回一个完整的游戏角色对象。Director
类使得构建复杂对象的过程更加清晰和可维护,同时也将构建过程和具体的对象构建细节分离开来。