建造者模式
摘要
本文主要介绍建造者模式的原理,并给出了代码实现,以及该模式的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