建造者模式(Builder),將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。
如果用了建造者模式,那么用戶就只需指定需要建造的類型就可以得到它們,而具體建造的過程和細節就不需知道了。
//PRoduct類--產品類,由多個部件組成。class Product{ List<String> parts = new List<String>(); public void add(String part) { parts.add(part); } public void show() { foreach(String s : parts) System.out.print(s); }}//Builder類--抽象建造者類,確定產品由兩個部件PartA和PartB組成,并聲明一個得到產品建造后結果的方法GetResult。abstract class Builder{ public abstract void buildPartA(); public abstract void buildPartB(); public abstract Product getResult();}class ConcreteBuilder1 extends Builder{ private Product product = new Product(); @override public void buildPartA() { product.add(“部件A”); } @override public void buildPartB() { product.add(“部件B”); } @override public Product getResult() { return product; }}class ConcreteBuilder2 extends Builder{ private Product product = new Product(); @override public void buildPartA() { product.add(“部件X”); } @override public void buildPartB() { product.add(“部件Y”); } @override public Product getResult() { return product; }}//Director類--指揮者類class Director{ public void construct(Builder builder) { builder.BuilderPartA(); builder.BuilderPartB(); }}main(){ Director director = new Director(); Builder b1 = new ConcreteBuilder1(); Builder b2 = new ConcreteBuilder2(); director.construct(b1); Product p1 = b1.getResult(); p1.show(); director.construct(b2); Product p2 = b2.getResult(); p2.show();}Builder是為創建一個Product對象的各個部件指定的抽象接口。
ConcreteBuilder是具體建造者,實現Builder接口,構造和裝配各個部件。
Director是指揮者,用于創建一些復雜對象,這些對象內部構建的建造順序通常是穩定的,但對象內部的構建通常面臨著復雜的變化。
Product是具體產品角色。
建造者模式的好處就是使得建造代碼與表示代碼分離,由于建造者隱藏了該產品是如何組裝的,所以若需改變一個產品的內部表示,只需要再定義一個具體的建造者就可以了。
建造者模式是當創建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時適用的模式。
新聞熱點
疑難解答