十、建造模式

本文介绍建造者模式的基本概念,通过示例代码详细解释了产品、抽象建造者、指挥者、具体建造者及调用者的角色与职责。适用于希望了解如何使用建造者模式创建复杂对象的开发者。

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

 建造者模式用于创建一些复杂对象,这些对象内部构件间的建造顺序通常是稳定的,但对象内部的构建通常面临
着复杂的变化。 ————摘自《大话设计模式》

 

基本结构如下:
 ①、产品,想要创建的复杂对象

 ②、抽象建造者
 各个构件的抽象建造方法
 得到产品的抽象方法

 ③、指挥者,指挥建造者
 封装建造顺序的方法(产品的构建顺序,构件A-->构件B-->构件C)

 ④、具体建造者,继承抽象构造者
 各个构件的具体生成方法
 得到产品的方法

 ⑤、调用者
 建造者创建出产品所需全部构件
 指挥者调用构建方法
 得到产品

 示例代码:
 ①、产品#########################################

/**
 *	产品类 
 */
public class Product {
	private List<String> parts = new ArrayList<String>();
	/**
	 *	产品组装
	 */
	public void add(String part){
		parts.add(part);
	}
	
	/**
	 *	产品展示 
	 */
	public void show(){
		if(parts.size()>0){
			System.out.print("产品结构组成:");
			for(String part:parts){
				System.out.print("\t"+part);
			}
			System.out.print("\n");
		}
	}
}


 ②、抽象建造者#########################################

/**
 *	抽象建造类,假设产品包括部件1、部件2两部分 
 */
public abstract class Builder {
	public abstract void buildPart1(); //建造构件1
	public abstract void buildPart2();	//建造构件2
	public abstract Product getResult(); //得到产品
}


 ③、指挥者#########################################

/**
 *	指挥者,指挥建造者建造(封装建造算法) 
 */
public class Director {
	public void construct(Builder builder){ //控制建造次序
		builder.buildPart2();
		builder.buildPart1();
	}
}


 ④、具体建造者#########################################

/**
 *	具体建造者一,建造A、B构件
 */
public class ConcreteBuilder1 extends Builder {
	private Product p = new Product();
	@Override
	public void buildPart1() {
		p.add("构件A");
	}

	@Override
	public void buildPart2() {
		p.add("构件B");
	}

	@Override
	public Product getResult() {
		return p;
	}
}
/**
 *	具体建造者2,建造X、Y构件
 */
public class ConcreteBuilder2 extends Builder {
	private Product p = new Product();
	@Override
	public void buildPart1() {
		p.add("构件X");
	}

	@Override
	public void buildPart2() {
		p.add("构件Y");
	}

	@Override
	public Product getResult() {
		return p;
	}
}


 ⑤、调用者#########################################

public class Test {
	public static void main(String[] args) throws Exception {
		Director d = new Director(); //指挥者
		
		Builder b1 = new ConcreteBuilder1(); //建造者
		d.construct(b1); //建造次序
		Product p1 = b1.getResult(); //得到产品 
		p1.show();
	}
}


运行结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值