设计模式系列5-建造者模式

设计模式系列5-建造者模式


前言:

建造者模式(Builder)前一节讲了抽象工厂模式,这节讲23种设计模式之建造者模式。


什么是建造者模式?

将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。(最初的定义出现于《设计模式》(Addison-Wesley,1994)).


何时使用建造者模式?

在以下情境,自然会想到使用这一模式:
1.需要创建涉及各种部件的复杂对象。创建对象的算法应该独立于部件的半杯方式 。常见例子是构建组合对象。
2.构建过程需要以不同的方式(例如,部件或表现的不同组合)构建对象。


角色:

在此设计模式中,有以下几个角色:
1.Builder:为创建一个产品对象的各个部件指定抽象接口;
2.ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口;
3.Director:构造一个使用Builder接口的对象;
4.Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。


建造者模式的实现:

1.建造者模式在Java中的实现:
Build
public interface Builder {
	public void buildHead();
	
	public void buildBody();
	
	public void buildFoot();
	
	public Person buildPerson();
}

ConcreteBuilder

public class ConcreteBuilder implements Builder {
	Person person;
	
	public ConcreteBuilder() {
		person = new Person();
	}

	@Override
	public void buildHead() {
		person.setHead("创建人的头部");
		
	}

	@Override
	public void buildBody() {
		person.setBody("创建人的身体");
	}

	@Override
	public void buildFoot() {
		person.setFoot("创建人的脚");
	}

	@Override
	public Person buildPerson() {
		return person;
	}
}


Director

public class Director {
	public Person constructPerson(Builder builder) {
		builder.buildHead();
		builder.buildBody();
		builder.buildFoot();
		
		return builder.buildPerson();
	}
}


Product

public class Person {
	
	private String head;
	
	private String body;
	
	private String foot;

	public String getHead() {
		return head;
	}

	public void setHead(String head) {
		this.head = head;
	}

	public String getBody() {
		return body;
	}

	public void setBody(String body) {
		this.body = body;
	}

	public String getFoot() {
		return foot;
	}

	public void setFoot(String foot) {
		this.foot = foot;
	}
}

Test测试代码

public class Test {
	public static void main(String[] args) {
		Builder builder = new ConcreteBuilder();
		Director director = new Director();
		Person person = director.constructPerson(builder);
		
		System.out.println(person.getHead());
		System.out.println(person.getBody());
		System.out.println(person.getFoot());;
	}

}


测试结果如下图:


建造者模式与抽象工厂模式的区别:

1.建造者模式关注的是分步创建复杂对象,很多时候同一类型的对象可以以不同的方式创建。
2.抽象工厂的重点在于创建简单或者复杂产品的套件。
3.建造者模式在创多步建过程的最后一步返回产品,而抽象工厂模式则立刻返回产品。






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值