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

浙公网安备 33010602011771号