設計模式-建立者模式

###建立者模式 ####建立者模式優勢 在建立者模式中客戶端再也不負責對象的建立和組裝,而是由一個具體的組裝類來完成這項功能,將組裝的責任交給組裝類,客戶端只負責對象的調用,從而更加明確了各個類的職責。ui

####建立者模式缺點 缺點:利用建立者模式能夠建立出不一樣類型的產品,可是若是要建立的產品差別很是大就須要編寫多個建立者類來實現,這無疑增長了代碼的複雜性,並且建立者類只是在構造相關部件的發雜關係上有優點,若是要增長一個部件仍是須要改變原有的代碼,增長新的模塊。設計

####建立者模式和工廠模式區別 工廠模式(工廠方法,簡單工廠,抽象工廠)的關注點僅僅是最終產品,而建造者模式關注的除了產品以外,它還關心着產品構造的細節,這一點是Builder模式和Factory模式最顯著的區別。code

建立者類圖

####建立者模式代碼實現建房子 我要一座房子住,但是我不知道怎麼蓋(簡單的砌牆,層次較低),也不知道怎麼樣設計(建幾個房間,幾個門好看,層次較高),因而我須要找一幫民工,他們會砌牆,還得找個設計師,他知道怎麼設計,我還要確保民工聽設計師的領導,而設計師自己也不幹活,光是下命令,這裏砌一堵牆,這裏砌一扇門,這樣民工開始建設,最後,我能夠向民工要房子了。在這個過程當中,設計師是什麼也沒有,除了他腦子裏的設計和命令,因此要房子也是跟民工要,記住了!對象

// 工人接口,定義了各個工人所要進行的工所做。他們負責進行具體部件如窗戶,地板的建造。
// 同時由於房子是民工建的,所以建設完成後由他把房子遞交回房主
public interface Builder {
    void makeWindow();
    void makeFloor();
    Room getRoom();
}

// 具體的工人->名工建造
public class MingGong implements Builder {
    private  String window="";
    private  String floor="";

    public  void makeWindow() {
        window=new String("window");
    }

    public  void makeFloor(){
        floor=new String("floor");
    }

    // 回交房子給房主
    public  Room  getRoom() {
        if((!window.equals(""))&&(!floor.equals(""))) {
            System.out.println("room ready!");
            return new Room();
        }
        else return null;
    }
}

//設計者設計房屋可是本身不去建造,指揮工人去建造
public class Designer {
    public void order(Builder builder){
        builder.makeWindow();
        builder.makeFloor();
    }
}

//最終的產品->房屋
public class Room {
}

public class Client {
    public static void main(String[] args) {
        //建造者
        Builder builder = new MingGong();
        //設計師
        Designer designer = new Designer();
        //指揮建造
        designer.order(builder);
        //獲取房屋
        builder.getRoom();
    }
}
相關文章
相關標籤/搜索