首页 > 学院 > 开发设计 > 正文

【设计模式】Builder模式

2019-11-09 16:58:16
字体:
来源:转载
供稿:网友

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();


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表