设计模式——建造者模式(Builder Pattern)

一、模式定义

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

简单来说,建造者模式适用于对象产品有复杂的内部结构,由具有多个部分/多个步骤创建而成的情况(比如某对象的成员属性种具有引用类型的对象),那么在实例化时就得先实例化成员对象。建造者模式就是一步步的创建而得到该对象。

建造者模式与抽象工厂的区别:抽象工厂中的具体工厂子类对象可以生产多种产品(即不同等级结构的产品)。而建造者模式是通过指挥者中的Builder决定产生产品的类型,也就是说一个指挥者生产一种产品,但是可以通过对指挥者的Builder进行设置而转换成在这里插入代码片生产其他产品。

二、模式类图

在这里插入图片描述
产品类(Product)
指挥者类(Director):用于指挥生产产品的步骤(construct函数内安排不同建造产品的次序会产生不一样的产品,比如在生产Product过程中删除或保留BuildA()这一步骤)
建造者类(Builder):用于实现生产产品的步骤

三、模式代码(JAVA)

class Product{
	//产品类
	String partA;
	int partB;
	float partC;
	//设置部分
	void setPartA(String partA) { this.partA = partA;}
	void setPartB(int partB) { this.partB = partB;}
	void setPartC(float partC) { this.partC = partC;}
}

class Director{
	//指挥者类
	Builder builder;
	public Product construct(){
		//建造过程
		builder.buildPartA();
		builder.buildPartB();
		builder.buildPartC();
		return builder.getProduct();
	}
	public Director(Builder builder) {
		this.builder = builder;
	}
	void setBuilder(Builder builder) { this.builder = builder;}
}

abstract class Builder{
	//建造者类
	protected Product product;
	public abstract void buildPartA();
	public abstract void buildPartB();
	public abstract void buildPartC();
	public Product getProduct(){
		return new Product();
	}
	Builder(){ product = new Product();}
}
//13建造
class A13Builder extends Builder{
	//具体建造者
	public void buildPartA() { product.setPartA("A13core");}
	public void buildPartB() { product.setPartB(2019); }
	public void buildPartC() { product.setPartC(11); }
	public Product getProduct(){
		return new Product();
	}
}
//A12建造
class A12Builder extends Builder{
	public void buildPartA() { product.setPartA("A12core");}
	public void buildPartB() { product.setPartB(2018); }
	public void buildPartC() { product.setPartC(10); }
	public Product getProduct(){
		return new Product();
	}
}

public class Main {
	//主函数
	public static void main(String[] args) {
		//指挥者
		Director director = new Director(new A13Builder());
		//A13产品
		Product A13 = director.construct();
		//设置A12Builder
		director.setBuilder(new A12Builder());
		//12产品
		Product A12 = director.construct();
			
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值