設計模式是一套被反覆使用,多數人知曉,通過分類編目的,代碼設計的總結,也能夠說是前人的智慧結晶。學習設計模式能讓咱們對一些應用場景使用相同的套路達到很好的效果,我會不定時更新一些本身對設計模式的理解的文章,從定義,實現,應用場景來講說設計模式,今天我要說的對象是建造者模式 一:定義 建造者模式(Builder Pattern):將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。建造者模式是一種對象建立型模式。 二:實現 一個標準的構建者模式一般油4部分組成 1.抽象的產品類product: 定義產品的公共屬性,以及getter,setter方法 2.抽象的建造類builder: 抽象每一個屬性的建立方法以及一個組裝方法,這個方法把零散的屬性組裝成完成的對象 3.具體的建造類ProductBuilder: 全部的具體建造類都繼承抽象的建造類,不一樣的產品對具體屬於有不通實現 4.指揮者類director: 控制實際構建過程的類,只須要將一個具體的建造類的實例指向抽象的建造類的引用, 而後調用抽象引用的組裝方法,就能夠獲得具體的產品//產品類class Products{ public String partA;//A屬性,實際開發中多是複雜的對象實例 public String partB;//B屬性,實際開發中多是複雜的對象實例 public String partC;//C屬性,實際開發中多是複雜的對象實例 //重寫toString方法,方便演示 @Override public String toString() { return "Products{" + "partA='" + partA + '\'' + ", partB='" + partB + '\'' + ", partC='" + partC + '\'' + '}'; } public String getPartA() { return partA; } public void setPartA(String partA) { this.partA = partA; } public String getPartB() { return partB; } public void setPartB(String partB) { this.partB = partB; } public String getPartC() { return partC; } public void setPartC(String partC) { this.partC = partC; }}//抽象的建造類abstract class Build{ public Products products;//給子類引用 public abstract void buildPartA();//對A屬性的構建方法 public abstract void buildPartB();//對B屬性的構建方法 public abstract void buildPartC();//對C屬性的構建方法 public abstract Products createProducts();//抽象的組裝成完整對象的方法}//具體的建造類,這種類型的類能夠有多個,用戶建造不一樣的實例class ProductBuild extends Build{ @Override public void buildPartA() { products.setPartA("這是partA");//給父類的屬性A設置 } @Override public void buildPartB() { products.setPartB("這是partB");//給父類的屬性B設置 } @Override public void buildPartC() { products.setPartC("這是partC");//給父類的屬性C設置 } //編寫具體的建造方法,返回組裝完成後的對象 @Override public Products createProducts() { products=new Products();//實例化具體的產品類 buildPartA(); buildPartB(); buildPartC(); return products; }}//指揮者類class Director{ //建造類,使用具體的建造類,建立複雜對象 public static void construct(){ Build build=new ProductBuild(); Products product=build.createProducts(); System.out.println(product); } //測試 public static void main(String[] dfdf){ Director.construct(); }}從代碼能夠看得出來,建造者模式通常用於構建一個複雜的對象,一樣的構建過程能夠構建不通的表示,也就是不通的實例。很天然的讓咱們想到抽象工廠模式,同一個工廠也能夠建立不通的實例,不過建造者模式和工廠模式又有所不通,由於它構建的對象是複雜的。假如一個建造者模式構建出來的對象有A,B,C,D,E五個部分組成,那麼這五個部分都須要一個專門的build方法來建立它。不過不一樣於抽象工廠類的事,建造者模式建立的是一個複雜對象,而抽象工廠模式建立出來的事有相互聯繫的多個對象。相同的是,建造者模式的具體建造者類能夠有多個,用戶建造不一樣的產品 三:應用場景 在如下狀況下能夠考慮使用建造者模式: (1) 須要生成的產品對象有複雜的內部結構,這些產品對象一般包含多個成員屬性。 (2) 須要生成的產品對象的屬性相互依賴,須要指定其生成順序。 (3) 對象的建立過程獨立於建立該對象的類。在建造者模式中經過引入了指揮者類,將建立過 程封裝在指揮者類中,而不在建造者類和客戶類中。 (4) 隔離複雜對象的建立和使用,並使得相同的建立過程能夠建立不一樣的產品。