發這個文章到首頁的主要目的,是不知道爲何UML圖中,程傑大佬用的是聚合關係,而我只能看到依賴關係,百思不得其解,還請各位大俠可以在評論區爲我解答!!!!!!!java
將一個複雜對象的構件與它的表示分離,是的一樣的構建能夠建立不一樣的表示。算法
先把構建過程獨立出來,在建造者模式中把它稱爲指導者,由他來知道裝配過程。但不負責每步具體的實現。
要有能具體實現每步的對象,稱之爲建造者或者生成器。ide
分離總體構件算法和部件構造。ui
產品類,由N個部件組成code
package 建造者模式; import java.util.ArrayList; import java.util.List; public class Product { List <String> concrete_Elements=new ArrayList<>(); public void add(String s) { concrete_Elements.add(s); } public String getProduct() { String s="產品構成:"; for(String a:concrete_Elements) { s=s+" "+a; } return s; } }
建造者類,好比作漢堡的方法,步驟一作夾層,步驟二作漢堡的麪包對象
package 建造者模式; public abstract class Builder { abstract public void Build_PartA();//步驟1 abstract public void Build_PartB();//步驟2 abstract public Product Get_Product();//獲得產品 }
實際建造者類1,好比是作雞腿堡,那麼第一步是炸雞腿blog
package 建造者模式; public class Concrete_Builder_Type_1 extends Builder { private Product Pro=new Product(); @Override public void Build_PartA() { // TODO Auto-generated method stub Pro.add("產品1的組件A"); } @Override public void Build_PartB() { // TODO Auto-generated method stub Pro.add("產品1的組件B"); } @Override public Product Get_Product() { // TODO Auto-generated method stub return Pro; } }
實際建造者類2,好比是作大牛肉堡,那麼第一步是煎牛肉,第二步是烤一個大漢堡的麪包圖片
package 建造者模式; public class Concrete_Builder_Type_2 extends Builder { private Product Pro=new Product(); @Override public void Build_PartA() { // TODO Auto-generated method stub Pro.add("產品2的組件A"); } @Override public void Build_PartB() { // TODO Auto-generated method stub Pro.add("產品2的組件B"); } @Override public Product Get_Product() { // TODO Auto-generated method stub return Pro; } }
指導者,相似監工,經理這一類的。
客戶要了個雞腿堡,他會讓雞腿堡的製做者,去幹活,他只看到炸雞腿了,也烤麪包了,具體細節,他不用知道,只要不偷懶就行。get
package 建造者模式; public class Director { public void Construct(Builder builder) { builder.Build_PartA(); builder.Build_PartB(); } }
客戶端,類比點餐系統產品
package 建造者模式; public class Client { public static void main(String[] args) { Director dio=new Director();//建造指揮者 Builder buil1=new Concrete_Builder_Type_1() ; //產品1的建造者 Builder buil2=new Concrete_Builder_Type_1() ;//產品2的建造者 dio.Construct(buil1);//指揮1號生產產品1 Product pro1=buil1.Get_Product();// 從1號手裏拿到商品 System.out.println(pro1.getProduct()); dio.Construct(buil2);//指揮2號生產產品2 Product pro2=buil1.Get_Product();// 從2號手裏拿到商品 System.out.println(pro2.getProduct()); } }