建造者模式—設計角度重溫DNF中的角色
應用場景
假設現在我們要設計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(); } }
構建者模式與工廠模式極為相似,建議還是用應用場景去記。而構建者模式相比於工廠模式它多了一個組裝過程,而它的應用場景主要是用於構造一個復雜的對象,而工廠模式主要是專註於生產產品或者生產產品系列。當然,他們也可以結合,工廠模式專註於生產產品系列,而構建者模式專註於控制產品的構造流程,從而制造一個復雜的對象。對於設計模式不要拘泥於文字,主要是一種思想在我們運用的時候信手拈來。
版權聲明
作者:xiaoyongAaron(邱勇)
出處:http://www.cnblogs.com/qiuyong/
您的支持是對博主深入思考總結的最大鼓勵。
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,尊重作者的勞動成果。
建造者模式—設計角度重溫DNF中的角色