读《Java与模式》笔记之建造者模式

本文详细介绍了建造模式的概念及其在软件设计中的应用。通过具体实例展示了如何使用建造者、具体建造者、导演者等角色来分离产品的构造过程与表示,使得创建复杂对象的过程更加灵活和易于扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

建造模式是对象的创建模式。

 

建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

 

建造者(Bulider):给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(ConcreteBuilder)角色。具体建造者类必须实现这个接口所要求的建造方法和结果返回方法。

 

具体建造者(ConcreteBuilder):担任这个角色的是与应用程序紧密相关的一些类,它们在应用程序调用下创建产品的实例。这个角色要完成的任务包括:

1.实现抽象建造者Builder所声明的接口,给出一步一步地完成创建产品实例的操作。

2.在建造过程完成后,提供产品的实例。

 

导演者(Director):担任这个角色的类调用具体建造者以创建产品对象。应当指出的是,导演者角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色。

 

产品:产品(Product)是建造中的复杂对象。一般来说,一个系统中会有>=1个产品类,而且这些产品类并不一定有共同的接口,而且完全是不相关联的。

 

 

package org.liujia.basic.designpatterns.anotherbuilder;

public class Director {
	private Builder builder;
	public void construct(){
		builder = new ConcreteBuilder();
		//建造零件
		builder.buildPart1();
		builder.buildPart2();
		//获得产品
		Product  product = builder.retrieveResult();
		
	}
}

 

 

package org.liujia.basic.designpatterns.anotherbuilder;

public abstract class Builder {
	
	/**建造第一部分
	 * 
	 */
	public abstract void buildPart1();
	
	/**建造第二部分
	 * 
	 */
	public abstract void buildPart2();
	
	/**返回结果对象
	 * 
	 */
	public abstract Product retrieveResult();
	
}

 

 

package org.liujia.basic.designpatterns.anotherbuilder;

public class ConcreteBuilder extends Builder{
	
	private Product product = new Product();
	@Override
	public void buildPart1() {
//		建造第一部分 如:product.name=xxxxxx;
	}

	@Override
	public void buildPart2() {
//		建造第二部分
	}

	@Override
	public Product retrieveResult() {
		return product;
	}

}

 

 

package org.liujia.basic.designpatterns.anotherbuilder;

public class Product {
	//Product的一些属性
}

 

如果有多个产品类的话,就多写几个ConcreteBuilder ,每个ConcreterBuilder生成对应的产品。

每个产品类都实现一个共同的抽象接口(Product),这样retrieveProduct的返回值都可以写成Product,但是却能获得不同的产品。

 

 

 

简化后:

            简化后Director和抽象的Builder被省略掉。

 

 

package org.liujia.basic.designpatterns.builder.simplifiedeidtion;

public class Client {
	
	private static Builder builder ;
	
	public static void main(String[] args) {
		builder = new Builder()	;
		builder.construct();
		Product product = builder.retrieveResult();
	}
	
}

 

 

package org.liujia.basic.designpatterns.builder.simplifiedeidtion;

public class Builder {
	private Product product = new Product() ;
	
	public void buildPart1(){
		
	}
	public void buildPart2(){
		
	}
	public Product retrieveResult(){
		return product;
	}
	public void construct(){
	
		buildPart1();
		buildPart2();
		
	}
}

 

 

package org.liujia.basic.designpatterns.builder.simplifiedeidtion;

public class Product {
	
}

 

 

 

仅作为笔记,并给不懂的人做个参考。牛B的人就不要看了。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值