建造者模式:設計角度重溫遊戲中的角色
阿新 • • 發佈:2018-11-08
應用場景
假設現在我們要設計DNF中的人物角色(鬼劍士、神槍手、魔法師、聖騎士、格鬥家)。然而,利用面對物件的思想,必須先從實體入手,每一個角色都包含各種裝備、武器、配飾,這些就當做要建造的零件,然後把裝備零件組裝起來,那麼就是最終人物角色的能量值,然後它就將造成不同的傷害。
回憶過程:假設要建立一個角色,先構建裝備零件,控制者控制組裝裝備零件,構建者得到專屬角色。
簡述實現
建造者模式:將一部負責物件的構建分為許多小物件的構建,最後在整合構建的模式。
建造者模式適用於構造一個很複雜的物件,將其拆分成很多個小物件,方便管理物件。
控制者(Director):控制整個組合過程,通過呼叫Builder內部的各元件的生成方法進行組裝。
構建者(Builder):構建者介面,定義構建各部件的方法。
實際構建者(ConcreteBuilder):具體構建出各部件物件,獲得構造結構。
成品(Product):成品類。
成品類(Car)
public class Car { //車頭 private CarHead carHead; //車身 private CarBody carBody; //車輪 private Wheel wheel; public Car() {} public Car(CarHead carHead, CarBody carBody, Wheel wheel) { super(); this.carHead = carHead; this.carBody = carBody; this.wheel = wheel; } public void run(){ System.out.println("車開著 嘟嘟嘟嘟!!!"); } public CarHead getCarHead() { return carHead; } public void setCarHead(CarHead carHead) { this.carHead = carHead; } public CarBody getCarBody() { return carBody; } public void setCarBody(CarBody carBody) { this.carBody = carBody; } public Wheel getWheel() { return wheel; } public void setWheel(Wheel wheel) { this.wheel = wheel; } } class CarHead{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } class CarBody{ private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } } class Wheel{ private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 成品類
抽象構建者(Builder)
public interface Builder {
//構造車頭
void builderCarHead();
//構造車身
void builderCarBody();
//構造輪子
void builderWheel();
//得到構建成品
Car getCar();
}
實際構造者(CarBuilder)
public class CarBuilder implements Builder{ Car car=new Car(); @Override public void builderCarHead() { System.out.println("構建車頭!"); car.setCarHead(new CarHead()); } @Override public void builderCarBody() { System.out.println("構建車身!"); car.setCarBody(new CarBody()); } @Override public void builderWheel() { System.out.println("構建輪子!"); car.setWheel(new Wheel()); } public Car getCar(){ return this.car; } }
控制者(Director)
public class Director {
private Builder builder;
public Director(Builder builder) {
System.out.println("控制車組裝");
this.builder=builder;
builder.builderCarHead();
builder.builderCarBody();
builder.builderWheel();
}
}
客戶端(Client)
public class Client {
public static void main(String[] args) {
//製造零件
Builder builder=new CarBuilder();
//組裝汽車
Director director=new Director(builder);
//獲得製造結果
Car car=builder.getCar();
//汽車開始跑
car.run();
}
}
構建者模式與工廠模式極為相似,建議還是用應用場景去記。而構建者模式相比於工廠模式它多了一個組裝過程,而它的應用場景主要是用於構造一個複雜的物件,而工廠模式主要是專注於生產產品或者生產產品系列。當然,他們也可以結合,工廠模式專注於生產產品系列,而構建者模式專注於控制產品的構造流程,從而製造一個複雜的物件。對於設計模式不要拘泥於文字,主要是一種思想在我們運用的時候信手拈來。