设计模式之Builder模式

Builder模式(建造者模式)是一种比较简单的设计模式,说到Builder模式,比较容易想到的就是AlertDialog.Builder,安卓中AlertDialog是可以通过Builder生成的,但是为什么需要使用Builder呢?下面对Builder模式做一个简单的介绍。

建造者模式也叫做生成器模式,其定义如下:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示。

在建造者模式中,一般有如下4个角色:

Product产品类:

通常是实现了模板方法模式,即拥有模板方法和基本方法,所谓基本方法即定义一些最基本的操作的具体实现的方法,比如AlertDialog中setTitle、setCancellable之类的方法,而模板方法可以理解为对基本方法的一个组装,一般在抽象类中具体实现而不需要在子类中复写。

Builder抽象建造者:

规范产品的构建,一般由子类具体实现,这部分仅仅是接口的抽象。

Builder具体建造者:

抽象建造者的子类,实现抽象建造者中的抽象方法,并且返回一个组建好的对象。

Director导演类:

负责安排已有模块的顺序,然后告诉Builder开始建造。

建造者模式的通用源码如下:

//产品类
public class Product(){
	public void doSomething(){
		//业务逻辑
	}
}

//抽象建造者
public Interface IBuilder{
	void setPart();
	Product buildProduct();
}

//具体建造者
public class Builder implements IBuilder{
	private Product product;
	public void setPart(){
		//业务逻辑
	}
	public Product buildProduct(){
		return product;
	}
}

//导演类
public class Director{
	private IBuilder builder = new Builder();
	public Product getProductA(){
		builder.setPart();
		return builder.buildProduct();
	}
}


看过上面代码发现使用建造者模式有什么好处了吗?上面的例子,通过建造者模式,使得建造过程通过Director类的量产建造顺序固定的Product,即调用某一个具体建造者来批量的建造Product。

使用建造者模式,我们可以不在关注产品内部的实现细节,我们更多的关心组装流程,即setPart内的逻辑。而且每个具体建造者是相互独立的,这样对系统的扩展性就非常有利,如果需要创建一个新的类型的Product,我们之间添加一个Builder类即可,此外,由于具体建造者相互独立,所以我们可以将建造过程逐步细化,却不会对其他模块产生任何影响。

到这里不知道大家有没有这样的疑问,建造者模式和工厂模式非常相似啊,确实是非常的相似,但是两者还是存在一个很大的区别,建造者模式的最主要功能是基本方法的调用顺序安排,也就是说这些方法已经实现了,通俗的说就是零部件的组装,顺序不同,产生的对象也不同,然而工厂方法则重点在于创建,创建零件是他的主要职责,而组装并不是它所关心的。

下面总结下建造者模式的使用场景:

1. 相同的方法,不同的执行顺序会产生不同的事件结果时,可以采用建造者模式

2. 多个部件或者零件,都可以装配到一个对象,但是产生的运行结果却不同时,可以采用建造者模式

3. 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效果,可以采用建造者模式

想到我们一开始提到的AlertDialog就属于产品类非常复杂,有很多属性需要设置,这时采用建造者模式就非常适合,而Android系统中也是在AlertDialog类中嵌入一个static class Builder,通过这个Builder,我们可以链式的生成dialog。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值