建造者模式

本文介绍建造者模式的设计理念,通过示例代码展示了如何将复杂对象的构造与其表示分离,实现相同的构建过程创建不同表示的目的。适用于内部结构复杂的产品对象创建。

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

将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

 

代码实现:

产品类:

package com.demo.builder.product;

public class Product {
	public String component1;	// 部件1
	public String component2;	// 部件2
	public String component3;	// 部件3
	
	public String getComponent1() {
		return component1;
	}
	
	public void setComponent1(String component1) {
		this.component1 = component1;
	}
	
	public String getComponent2() {
		return component2;
	}
	
	public void setComponent2(String component2) {
		this.component2 = component2;
	}
	
	public String getComponent3() {
		return component3;
	}
	
	public void setComponent3(String component3) {
		this.component3 = component3;
	}
	
	public Product() {
	}
	
	public void show() {
		System.out.println("component1 : " + component1);
		System.out.println("component2 : " + component2);
		System.out.println("component3 : " + component3);
	}
}

建造者接口:

package com.demo.builder.builder;

import com.demo.builder.product.Product;

public interface IBulider {
	
	public void buildComponent1();	// 建造部件1
	public void buildComponent2();	// 建造部件2
	public void buildComponent3();	// 建造部件3
	
	public Product getProduct();	// 返回产品实例
}

抽象建造者:

package com.demo.builder.builder;

import com.demo.builder.product.Product;

public abstract class BaseBulider {
	
	protected Product product;
	
	public BaseBulider() {
		this.product = new Product();
	}
}

具体建造者:

package com.demo.builder.builder;

import com.demo.builder.product.Product;

public class BuilderImpl extends BaseBulider implements IBulider {

	@Override
	public void buildComponent1() {
		product.setComponent1("component1");
	}

	@Override
	public void buildComponent2() {
		product.setComponent2("component2");
	}

	@Override
	public void buildComponent3() {
		product.setComponent3("component3");
	}

	@Override
	public Product getProduct() {
		return this.product;
	}

}

指导者类:

package com.demo.builder.director;

import com.demo.builder.builder.IBulider;
import com.demo.builder.product.Product;

public class Director {
	
	public Director() {
	}
	
	public Product createProduct(IBulider bulider) {
		if (bulider != null) {
			bulider.buildComponent1();
			bulider.buildComponent2();
			bulider.buildComponent3();
			
			return bulider.getProduct();
		}
		return null;
	}
}

测试代码:

package com.demo.builder;

import com.demo.builder.builder.BuilderImpl;
import com.demo.builder.builder.IBulider;
import com.demo.builder.director.Director;
import com.demo.builder.product.Product;

public class MainApp {

	public static void main(String[] args) {
		Director director = new Director();
		IBulider bulider = new BuilderImpl();
		Product product = director.createProduct(bulider);
		product.show();
	}

}

结果输出:

component1 : component1
component2 : component2
component3 : component3

 

建造者接口中有三个抽象方法分别实现了各个部件的构建,还有一个抽象方法返回产品实例,从而使得构造对象和获取对象分离。

指导者类的作用是封装了建造者构建产品的过程。

 

使用建造者模式的适用场合:

1) 当生成的产品对象内部具有复杂的结构时;

2) 当复杂对象需要与表示分离,可能需要创建不同的表示时;

3) 当需要向客户隐藏产品的内部结构的表现时。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值