建造者模式

摘要

  本文主要介紹建造者模式的原理,並給出了代碼實現,以及該模式的UML圖。通過本文的學習,可以理解建造者模式的原理、模式運用場景,從而在以後的工作學習中使用建造者模式。

一、建造者模式

  建造者模式用於創建一個由多個部分組成的複雜對象。比如KFC的漢堡,漢堡由麪包、雞蛋、肉等組成,所以要建造漢堡,需要先建造麪包、雞蛋和肉,然後才能建造漢堡。

二、建造者模式的實現

  代碼結構

   2.1、HamburgerDirector.java
   2.2、KFCHamburgerDirector.java
   2.3、HamburgerBuilder.java
   2.4、KFCHamburgerBuilder.java
   2.5、Bread.java、Eag.java、Meat.java
   2.6、Hamburger.java
   2.7、Main.java

2.1、HamburgerDirector.java

  HamburgerDirector爲一個構建接口,可以有不同的Hamburger構建器實現,比如KFCHamburgerDirector構建出KFC的Hamburger,MCDHamburgerDirector構建出MCD的Hamburger。本文只列出了KFCHamburgerDirector一族的代碼,MCDHamburgerDirector對應的代碼族請讀者自己仿寫即可。

public interface HamburgerDirector {
	public Hamburger createHamburger();
}

2.2、KFCHamburgerDirector.java

  KFCHamburgerDirector是一個構建器的實例,只能用於創建KFC的Hamburger對象。

public class KFCHamburgerDirector implements HamburgerDirector{
	private HamburgerBuilder builder;
	
	public KFCHamburgerDirector(KFCHamburgerBuilder builder) {
		super();
		this.builder = builder;
	}

	@Override
	public Hamburger createHamburger() {
		Bread bread = builder.createBread();
		Meat meat = builder.createMeat();
		Eag eag = builder.createEag();
		return new Hamburger(bread, eag, meat);
	}
}

2.3、HamburgerBuilder.java

  HamburgerBuilder是用於建造Hamburger部件的接口,爲實例建造者提供相應的接口。

public interface HamburgerBuilder {
	public Bread createBread();
	public Meat createMeat();
	public Eag createEag();
}

2.4、KFCHamburgerBuilder.java

  KFCHamburgerBuilder是HamburgerBuilder建造者的一個實例,該實例只能建造KFC的Hamburger部件。

public class KFCHamburgerBuilder implements HamburgerBuilder{
	@Override
	public Bread createBread() {
		System.out.println("KFCHamburgerBuilder is building Bread");
		return new Bread();
	}

	@Override
	public Meat createMeat() {
		System.out.println("KFCHamburgerBuilder is building Meat");
		return new Meat();
	}

	@Override
	public Eag createEag() {
		System.out.println("KFCHamburgerBuilder is building Eag");
		return new Eag();
	}	
}

2.5、Bread.java、Eag.java、Meat.java

   Bread、Eag、Meat爲Hamburger的部件,可以不用謝具體的業務邏輯代碼,示意即可。

public class Bread {

}
public class Eag{

}
public class Meat{

}

2.6、Hamburger.java

   Hamburger是一個最終生產出來的漢堡對象。

public class Hamburger {
	private Bread bread;
	private Eag eag;
	private Meat meat;
	public Hamburger(Bread bread, Eag eag, Meat meat) {
		this.bread = bread;
		this.eag = eag;
		this.meat = meat;
		System.out.println("Hamburger is ready");
	}
}

2.7、Main.java

   Main是入口處。

public class Main {
	public static void main(String[] args) {
		HamburgerBuilder hamburgerBuilder = new KFCHamburgerBuilder();
		HamburgerDirector hamburgerDirector = new KFCHamburgerDirector((KFCHamburgerBuilder)hamburgerBuilder);
		
		Hamburger hamburger = hamburgerDirector.createHamburger();
	}
}

   運行結果:

KFCHamburgerBuilder is building Bread
KFCHamburgerBuilder is building Meat
KFCHamburgerBuilder is building Eag
Hamburger is ready
發佈了21 篇原創文章 · 獲贊 0 · 訪問量 1820
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章