建造者模式

摘要

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值