【设计模式】Builder模式

Builder模式:(对外部隐藏构建细节)

将对象的构建过程和它的表示隔离,同样的构建过程,创建不同的表示。

典型用例:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
      context).threadPriority(Thread.NORM_PRIORITY - 2)
      .denyCacheImageMultipleSizesInMemory()
      .discCacheFileNameGenerator(new Md5FileNameGenerator())
      .tasksProcessingOrder(QueueProcessingType.LIFO)
      .writeDebugLogs() // Remove for release app
      .build();
ImageLoader.getInstance().init(config);

运用场景:

1>产品复杂(不同种类,不同规格,不同颜色等等)

2>初始化对象复杂(参数多,且都有默认值时,不允许用户随意改动)

3>多个零件都可以装到一个对象中,运行结果却不同(电脑组装完毕,开机之后,品牌不同)

4>产品的成产规范相同(固定流程,例如成产电脑,或者电子产品)

5>用户可以自定义产品new ClassA().buildA().buildB().create();//返回一种特定产品

 

Product:产品,抽象类

Builder:产品生产规范,抽象类

ConcreteProduct:具体产品,Product的子类

ConcreteBuilder:具体生产规范,Builder的子类

Director:统一组建过程

示例代码:

/**
*计算机抽象类
*/
public abstract class Product{
	protected String cpu;
	protected String display;
	protected String os;
	public abstract void setCpu();
	public abstract void setDisplay();
	public abstract void setOs();
	@Override
	public String toString(){
		return "计算机[CPU:"+cpu+"显示器:"+display+"操作系统:"+os+"]";
	}
}

/**
*计算机具体类(细节)
*/
public class ConcreteProduct{
	
	@Override
	public void setOs(){
		os = "Mac OS X 10.10";
	}
}

/**
*抽象Builder类
*/
public abstract class Builder{
	public abstract buildCpu(String cpu);
	public abstract buildDisplay(String diaplay);
	public abstract buildOs();
	public abstract Product build();
}

/**
*具体的Builder类
*/
public class ConcreteBuilder extends Builder{
	private Product product = new ConcreteProduct();
	@Override
	public void buildCpu(String cpu){
		product.setCpu(cpu);
	}
	@Override
	public void buildDisplay(String diaplay){
		product.setDisplay(diaplay);
	}
	@Override
	public void buildOs(){
		product.setOs();
	}
	@Override
	public Product build(){
			return product;
	}
}

/**
*安装电脑(封装为一个类,外部统一调用)
*/
public class Director{
	Builder builder = null;
private Director director = null;
	Private Director(){
	}
public Director getInstance(){
   if(director == null){
    director = new Director();
}
   return director;
} 
/*
 *初始化设置(比如这里,统一了电脑的系统型号等)
 */
public void init(Builder builder){
   this builder = builder; 
}
public void A(){} 
public void B(){} 
public void C(){} 
}

/**
*测试类(外部调用Director)
*/
public class Test{
	Builder builder = new ConcreteBuilder().builder.buildCpu("因特尔").builder.buildDisplay("Retina显示器").builder.buildOs().build();
Director director = New Director().getIntance().init(builder);//初始化设置,目的:统一生产规格
director.A();//在统一规格下,增加电脑的新功能(需要新参数,再进行扩充,后续给出)
	System.out.println("成功安装"+new ConcreteBuilder.build().toString());
}

实例总结:

Builder模式的目的就是,把复杂的生产过程,以清晰简单的形式,展现出来。

Director:统一安装过程,将电脑安装的细节隐藏起来。

是不是想起了AlerDialog的构建过程

AlerDialog.Builder builder = new AlerDialog.Builder(context);

builder.setIcon(R.drawanle.icon).setTitle(“Title”);

builder.create().show();




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值