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

本文介绍建造者模式的概念、结构及代码实现,通过组装电脑的例子详细解释如何使用该模式。此外,还探讨了建造者模式的优缺点。

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

1、定义:

建造者模式:

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

2、结构:


建造者模式包括的角色:

(1)Builder:给出一个抽象接口或抽象类,以规范产品的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建,一般由子类具体实现

(2)ConcreteBuilderBuilder接口的实现类,并返回组建好对象实例。

(3)Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

(4)Product:要创建的复杂对象,产品类


3、代码实现:

用组装电脑作为例子如下:

要组装一台电脑(Computer类),我们假设它有三个部件:CPU 、主板以及内存。

3.1产品类

package com.gcc.designmode.builder;
/**
 * 
 * @author gcc
 *
 * 2018年2月26日
 */
public class Computer {
	private String mCpu;  
    private String mMainboard;  
    private String mRam;
	public String getmCpu() {
		return mCpu;
	}
	public void setmCpu(String mCpu) {
		this.mCpu = mCpu;
	}
	public String getmMainboard() {
		return mMainboard;
	}
	public void setmMainboard(String mMainboard) {
		this.mMainboard = mMainboard;
	}
	public String getmRam() {
		return mRam;
	}
	public void setmRam(String mRam) {
		this.mRam = mRam;
	}
	

    
}

3.2 Builder

package com.gcc.designmode.builder;
/**
 * 抽象的builder类
 * @author gcc
 *
 * 2018年2月26日
 */
public abstract class Builder {

	public abstract void buildCpu(String cpu);
	public abstract void buildMainboard(String mainboard);  
	public abstract void buildRam(String ram);  
	public abstract Computer create();
}

3.3  Builder实现类

下面是一个继承Builder的子类,里面不仅新建了Computer的实例,还提供了安装CPU、主板和内存的具体实现方法,并且在组装成电脑的create方法将该Computer对象实例返回

package com.gcc.designmode.builder;
/**
 * Builder实现类
 * @author gcc
 *
 * 2018年2月26日
 */
public class MyComputerBuilder extends Builder{

	private Computer computer = new Computer();
	@Override
	public void buildCpu(String cpu) {
		computer.setmCpu(cpu);
	}

	@Override
	public void buildMainboard(String mainboard) {
		computer.setmMainboard(mainboard);
		
	}

	@Override
	public void buildRam(String ram) {
		computer.setmRam(ram);
		
	}

	@Override
	public Computer create() {
		
		return computer;
	}

	
}

3.4 Director

指挥者(Director)类用来规范组装电脑的流程顺序,先安装主板,再安装CPU,最后安装内存并组装成电脑。

package com.gcc.designmode.builder;
/**
 * 建造者 用于按一定顺序建造产品
 * @author gcc
 *
 * 2018年2月26日
 */
public class Direcror {
	Builder builder =null;
	public Direcror(Builder builder) {
		this.builder = builder;
	}
	
	 public Computer CreateComputer(String cpu,String mainboard,String ram){  
		 this.builder.buildCpu(cpu);
		 this.builder.buildMainboard(mainboard);
		 this.builder.buildRam(ram);
		 return this.builder.create();
	 }

}

3.5 测试类

package com.gcc.designmode.builder;
/**
 * 测试 建造者模式
 * @author gcc
 *
 * 2018年2月26日
 */
public class Test {
    public static void main(String[] args) {
		Builder builder = new MyComputerBuilder();
		Direcror director = new Direcror(builder);
		director.CreateComputer("i9", "Intel主板", "mRam");
	}

}

4、建造者模式优缺点

建造者模式的优点:

(1)建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心,良好的封装性是建造者模式的优点之一。

(2)建造者类逻辑独立,易拓展

 

建造者模式的缺点:

很明显产生了多余的Build对象以及Dirextor对象,消耗了内存。

作者:scgyus

转载请注明出处:http://blog.youkuaiyun.com/scgyus/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值