Builder模式

Builder模式是一步一步创建一个复杂对象的创建型模式,允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。也就是针对于不同的对象,在不知道构建细节的情况下,通过不同的构建实现过程,得到不同的结果。

Builder模式的定义

将一根复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

Builder模式的使用场景

1、相同的方法,不同的执行顺序,产生不同的事件结果。

2、多个部件都可以装配到一个对象中,但是产生的运行结果不同。

3、产品类非常复杂,或者产品类的调用舒心产生不同的作用。

4、当初始化一个对象特别复杂,如参数多,切很多参数具有默认值。

场景举例:

Builder模式UML图

角色介绍:

Product:产品类

Builder:抽象Builder类,规范产品的组建,一般由子类实现。

ConcreteBuilder:继承Builder抽象类,实现类。

Director:统一组装过程。

Builder模式的简单实现

场景:计算机组装,通过计算机主机,操作系统,显示器组件进行举例,通过Director和具体Builder来组建计算机对象。

实例代码如下:


public abstract class Computer { protected String mBoard; protected String mDisplay; protected String mOS; public Computer(){} //设置CPU核心数 public void setBoard(String board) { mBoard=board; } //设置内存 public void setDisplay(String display) { mDisplay=display; } //设置OS public abstract void setOS(); }

  

/***
HP电脑
**/
public class HPBook extends Computer
{
	public HPBook(){}
	@Overrider
	public void setOS()
	{
		mOS="Windows 10";
	}
}

  

/****抽象Builder类***/
public abstract class Builder
{
	//设置主机
	public abstract void buildBoard(String board);
	//设置显示器
	public abstract void buildDisplay(String display);
	//设置操作系统
	public abstract void buildOS();
	//创建计算机
	public abstract Computer createComputer();
}

  

/***具体实现Builder类***/
public class HPBuilder extends Builder
{
	private Computer mCompter=new HPBook();
	@Overrider
	public void buildBoard(String board)
	{
		mComputer.setBoard(board);
	}
	@Overrider
	public void setbuildDisplay(String display)
	{
		mComputer.setDisplay(display);
	}
	@Overrider
	public void builOS()
	{
		mComputer.setOS();
	}
	@Overrider
	public Computer createComputer()
	{
		return mComputer;
	}
}

  

/****组装类***/
public class Director
{
	Builder builder=null;
	public Director(Builder builder)
	{
		this.builder=builder;
	}
	public void construct(String board,String display)
	{
		builder.buildBoard(board);
		builder.buildDisplay(display);
		builder.buildOS();
	}
}

  

public class Test
{
	public static void main(String[] args)
	{
		//构建器
		Builder builder=new HPbookBuilder();
		//组装
		Director PC_Director=new Director(builder);
		PC_Director.construct("华硕主板","三星显示器");
		System.out.println(builder.createComputer().toString());

	}
}

  

posted @ 2016-03-02 20:40  LongerSoft  阅读(387)  评论(0)    收藏  举报