定義:
將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示,構建者只需要完成構建步驟,真正的構建內容由其表示填充。
/*
* shsheng
*/
package DesignPatterns;
public class BuilderPattern {
public static void main(String[] args) {
CombatPlatform combatPlatform = new CombatPlatform(1);
combatPlatform.changeWeapon(new Missile(1));
combatPlatform.aim(new City(1));
combatPlatform.fire();
combatPlatform.changeWeapon(new Cannon(1));
combatPlatform.aim(new City(2));
combatPlatform.fire();
}
static class CombatPlatform {
Weapon weapon;
int num;
public CombatPlatform(int num) {
this.num = num;
}
public void changeWeapon(Weapon weapon) {
System.out.println(this + "更換武器爲" + weapon + "!");
this.weapon = weapon;
}
public void aim(Object obj) {
System.out.println(this + "武器" + weapon.aim(obj));
}
public void fire() {
System.out.println(this + "武器" + weapon.fire());
}
@Override
public String toString() {
return "作戰平臺" + num;
}
}
static class City {
int num;
public City(int num) {
this.num = num;
}
@Override
public String toString() {
return "城市" + num;
}
}
static abstract class Weapon {
public abstract String aim(Object obj);
public abstract String fire();
}
static class Missile extends Weapon {
int num;
public Missile(int num) {
this.num = num;
}
@Override
public String aim(Object obj) {
return (this + "鎖定" + obj + "!");
}
@Override
public String fire() {
return (this + "發射!");
}
@Override
public String toString() {
return "導彈" + num;
}
}
static class Cannon extends Weapon {
int num;
public Cannon(int num) {
this.num = num;
}
@Override
public String aim(Object obj) {
return (this + "瞄準" + obj + "!");
}
@Override
public String fire() {
return (this + "開炮!");
}
@Override
public String toString() {
return "大炮" + num;
}
}
}
運行結果:
作戰平臺1更換武器爲導彈1!
作戰平臺1武器導彈1鎖定城市1!
作戰平臺1武器導彈1發射!
作戰平臺1更換武器爲大炮1!
作戰平臺1武器大炮1瞄準城市2!
作戰平臺1武器大炮1開炮!