设计模式(5)---建造者模式

本文深入讲解建造者模式,探讨其如何将复杂对象的构建过程与表示分离,通过具体实例(如造房子)说明如何利用该模式创建不同表示的复杂对象。文章详细介绍了建造者模式的实现步骤,包括定义产品类、建造者接口、具体建造者类和指挥者类,并通过测试类展示最终成果。
摘要由CSDN通过智能技术生成

在这里插入图片描述

上一篇:抽象工厂模式
1.什么是建造者模式?
   将一个复杂对象的构建和表示分离开,使得同样的构建可以创建不同的表示。

整不明白?
   你就想象一下你点外卖的时候有不同的套餐:可乐+炸鸡=套餐A,可乐+薯条=套餐B。套餐A和套餐B是两个不同的表示,它的构建就是可乐、炸鸡、薯条这些子对象,这些子对象是不变的,但是能够通过不同的组合生成不同的套餐。

   还没有懂?

   造房子!造房子你用的原材料无非就是钢筋、水泥之类的材料(构建子对象),但是最终造出来的房子(表示)却是不一样的。

2.建造者模式的作用?
   建造者模式用来隐藏复杂对象的实现细节,将复杂对象的创建进行抽象化,通过子类继承和重载的方式动态创建复杂对象。
3.如何使用建造者模式?
1)定义房子类
/**
 * 定义 房子类
 */
public class House {

	/**
	 * 钢筋
	 */
	private String rebar;

	/**
	 * 水泥
	 */
	private String cement;

	public String getRebar() {
		return rebar;
	}

	public void setRebar(String rebar) {
		this.rebar = rebar;
	}

	public String getCement() {
		return cement;
	}

	public void setCement(String cement) {
		this.cement = cement;
	}

	@Override
	public String toString() {
		return "House{" +
				"rebar='" + rebar + '\'' +
				", cement='" + cement + '\'' +
				'}';
	}
}
2)定义建造者接口(工人)
/**
 * 定义建造者(工人)
 */
public interface HouseBuilder {

	/**
	 * 加钢筋
	 */
	public void addRebar();

	/**
	 * 加水泥
	 */
	public void addCement();

	/**
	 * 获取房子对象
	 */
	public House getHouse();

}
3)定义造高楼的施工队
/**
 * 定义造高楼施工队类
 */
public class TallBuilder implements HouseBuilder {

	House house = new House();


	@Override
	public void addRebar() {
		house.setRebar("高楼---专用钢筋");
	}

	@Override
	public void addCement() {
		house.setCement("高楼---专用水泥");
	}

	@Override
	public House getHouse() {
		return house;
	}
}
4)定义工地总指挥

  建造者模式工厂模式的区别就在于:建造者模式更加专注于零件的装配顺序(先加钢筋还是先加水泥)。这里的工地总指挥类就是用来定义零件装配顺序的,总指挥让你先加水泥就先加水泥,先放钢筋就先放钢筋。

在这里插入图片描述

/**
 * 定义 指挥者 类
 */
public class Directer {

	public House build(HouseBuilder houseBuilder) {
		//加钢筋
		houseBuilder.addRebar();
		//加水泥
		houseBuilder.addCement();
		//返回一个hosue对象
		House house = houseBuilder.getHouse();
		return house;
	}
}
5)编写测试类
/**
 * 测试类
 */
public class Test {

	public static void main(String[] args) {
		//1.先new一个工地总指挥
		Directer directer = new Directer();
		//2.工地总指挥让修高楼(高楼施工队开始造房子)
		House tallHouse = directer.build(new TallBuilder());
		//3.打印输出
		System.out.println(tallHouse);
		System.out.println("========================");

		//4.工地总指挥让修矮楼(矮楼施工队开始造房子)
		House shortHouse = directer.build(new ShortBuilder());
		//打印输出
		System.out.println(shortHouse);
	}
}

5)打印输出结果

在这里插入图片描述
  看到测试类的时候,大家应该就已经知道建造者模式和我们普通获取对象的方式的区别了,要是普通方式,我们会直接在main()方法中new 一个house对象,然后给它set值。而现在我们使用建造者模式时反正还是用钢筋水泥,但是最终的成品却不一样。

3.建造者模式的优越点?
1)优点:

  具体的建造者是相互独立的(矮楼施工队、高楼施工队),便于横向扩展(再加个别墅施工队就直接添加新的实现类就行了)。

2)缺点:

  此种模式所创建的产品一般都有很多的相同点,如果不同点太多,则此种模式就不适用了,其使用范围受到一定的限制。

  如果产品的内部变化很大,则可能需要定义很多的建造者类来实现这种变化,可能导致系统过于庞大。

下一篇:原型模式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值