建造者模式
摘要
本文主要介紹建造者模式的原理,並給出了代碼實現,以及該模式的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