`

Builder(建造模式)

阅读更多
定义:Builder模式是一步一步创建一个复杂的对象,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 是为了将构建复杂对象的过程和它的部件解耦.
通常为四个角色:
i) 抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的构造;
ii)具体建造者(ConcretBuilder)角色:它在应用程序的调用下创建产品的实例。完成任务为;
a)  实现抽象建造者Builder接口,给出一步步完成创建产品实例的操作;
      b)  在创建完成后,提供产品的实例。
iii) 导演者(Director角色):调用具体建造者角色以创建产品对象;
  iv)产品(Product)角色:建造中的复杂对象。一般情况下,一个系统不止一个产品类。
假如我们要组装一台电脑(Computer类),里面有三个配件(Keyboard类,MainFrameBox类,Monitor类)
/**
 * Computer类 里面有com.jeedroid.part包里的三个属性
 */
package com.jeedroid.product;
import com.jeedroid.part.*;
public class Computer
{
private Keyboard keyboard;
private MainFrameBox mainFrameBox;
private Monitor monitor;
public Keyboard getKeyboard()
{
	return keyboard;
}
public void setKeyboard(Keyboard keyboard)
{
	this.keyboard = keyboard;
}
public MainFrameBox getMainFrameBox()
{
	return mainFrameBox;
}
public void setMainFrameBox(MainFrameBox mainFrameBox)
{
	this.mainFrameBox = mainFrameBox;
}
public Monitor getMonitor()
{
	return monitor;
}
public void setMonitor(Monitor monitor)
{
	this.monitor = monitor;
}
public Computer(Keyboard keyboard, MainFrameBox mainFrameBox, Monitor monitor)
{
	super();
	this.keyboard = keyboard;
	this.mainFrameBox = mainFrameBox;
	this.monitor = monitor;
}
}

/**
 * 这个类调用CreatorComputer类来完成组装工作
 */
package com.jeedroid.designpattern;

import com.jeedroid.product.Computer;

public class Director
{
private Builder builder;
public Director(Builder builder)
{
	this.builder=builder;
}
public void  construct()
{
	builder.buildKeyboard();
	builder.buildMainFrameBox();
	builder.buildMonitor();
}
}

/**
 * 这个类负责具体的组装工作
 */
package com.jeedroid.designpattern;

import com.jeedroid.part.Keyboard;
import com.jeedroid.part.MainFrameBox;
import com.jeedroid.part.Monitor;
import com.jeedroid.product.Computer;

public class CreatorComputer implements Builder
{
private Keyboard keyboard;
private MainFrameBox mainFrameBox;
private Monitor monitor;
private Computer computer;
	@Override
	public Keyboard buildKeyboard()
	{
		keyboard=new Keyboard("keyboard");
		return keyboard;
	}

	@Override
	public MainFrameBox buildMainFrameBox()
	{
		mainFrameBox=new MainFrameBox("MainFrameBox");
		return mainFrameBox;
	}

	@Override
	public Monitor buildMonitor()
	{
		monitor=new Monitor("monitor");
		return null;
	}

	@Override
	public Computer getComputer()
	{
		computer=new Computer(keyboard,mainFrameBox,monitor);
		return computer;
	}

}

测试代码
0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics