1. 程式人生 > >建造者模式—設計角度重溫DNF中的角色

建造者模式—設計角度重溫DNF中的角色

必須 face head sta 嘟嘟 裝備 body 控制 客戶

  

應用場景

  假設現在我們要設計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中的角色