設計模式----建造者模式UML和實現代碼

1、什麼是建造者模式?

一、定義

建造者模式:將一複雜對象的表示與構建相分離,使得一樣的構建過程可建立不一樣的顯示。java

二、  與抽象工廠的區別

在建造者模式裏,有個指導者,由指導者來管理建造者,用戶是與指導者聯繫的,指導者聯繫建造者最後獲得產品。即建造模式能夠強制實行一種分步驟進行的建造過程。git

三、舉例

建造模式是將複雜的內部建立封裝在內部,對於外部調用的人來講,只須要傳入建造者和建造工具,對於內部是如何建形成成品的,調用者無需關心。github

舉個簡單的例子,如 人的身體各部位,人的生命週期,一年四季,汽車,有不少部件,車輪,方向盤,發動機還有各類小零件等等,部件不少,但遠不止這些,如何將這些部件裝配成一部汽車,這個裝配過程也很複雜(須要很好的組裝技術), builder模式就是爲了將部件和組裝分開。ide

2、建造者模式UML

3、JAVA代碼實現

Builder.java

package com.amosli.dp.build.builder;

public abstract class Builder {
	public abstract void buildPartA();
	public abstract void buildPartB();
	public abstract Product getResult() ;
}

ConcreteBuilder.java

package com.amosli.dp.build.builder;

public class ConcreteBuilder extends Builder {

	private Product product = new Product();

	public Product getResult() {
		return product;
	}

	@Override
	public void buildPartA() {
		product.add("part a..");
	}

	@Override
	public void buildPartB() {
		product.add("part b..");
	}

}

Director.java

package com.amosli.dp.build.builder;

public class Director {
	private Builder builder;

	public Director(Builder builder) {
		this.builder = builder;
	}

	public void construct() {
		builder.buildPartA();
		builder.buildPartB();
	}
}


Product.java

package com.amosli.dp.build.builder;

import java.util.ArrayList;

public class Product {
	ArrayList<String> product = new ArrayList<String>();

	public void add(String part) {
		product.add(part);
	}
}


Client.java

package com.amosli.dp.build.builder;

public class Client {
	public static void main(String[] args) {
		Builder builder = new ConcreteBuilder();
		Director director = new Director(builder);
		director.construct();
		Product product = builder.getResult();
		System.out.println(product.product);
	}
}


4、使用場景

  • 相同的方法,不一樣的執行順序,產生不一樣的事件結果時,能夠採用建造者模式。工具

  • 多個部件或零件,均可以裝配到一個對象中,可是產生的運行結果又不相同時,則可使用該模式。ui

  • 產品類很是複雜,或者產品類中的調用順序不一樣產生了不一樣的效能,這個時候使用建造者模式是很是合適。this

  • 在對象建立過程當中會使用到系統中的一些其它對象,這些對象在產品對象的建立過程當中不易獲得時,也能夠採用建造者模式封裝該對象的建立過程。該種場景,只能是一個補償方法,由於一個對象不容易得到,而在設計階段居然沒有發覺,而要經過建立者模式柔化建立過程,自己已經違反設計最初目標。spa

5、優勢缺點

1.優勢

封裝性

      使用建造者模式可使客戶端沒必要知道產品內部組成的細節設計

易擴展

  建造者獨立,不一樣builder,能夠構建成不一樣的顯示,相互獨立,提升了程序的可擴展性code

便於控制細節風險

      因爲具體的建造者是獨立的,所以能夠對建造過程逐步細化,而不對其餘的模塊產生任何影響

2.缺點

     1.建造者模式所建立的產品通常具備較多的共同點,其組成部分類似,若是產品之間的差別性很大,則不適合使用建造者模式,所以其使用範圍受到必定的限制。

     2.若是產品的內部變化複雜,可能會致使須要定義不少具體建造者類來實現這種變化,致使系統變得很龐大,可維護性將變差

本系列文章源碼地址,https://github.com/amosli/dp  歡迎Fork  & Star !!

相關文章
相關標籤/搜索