设计模式----Builder(生成器)模式
来源:互联网 发布:vwap算法 编辑:程序博客网 时间:2024/05/01 17:06
设计模式----Builder(生成器)模式
GoF:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
Builder模式与Absrtact Factory模式非常像。GoF指出,他们二者的主要区别就在于Builder模式遵循一定的步骤一步一步创建对象。
Builder模式是为了将构建复杂对象的过程和他的部件相分离。因为一个复杂的对象不但有很多大量的组成部分,还有很多小的零件。他(复杂对象)本身要靠这些部件和零件来组装。例如:一座房子,它有很多部件:房间、窗户;还有门窗上的锁和窗户上的插销等小零件。Builder模式的目的就是为了将部件(门、窗等)和组装过程(整个房子的建造)分开。
现在假设一个房子有多个部件组成的,Builder模式的目的是把复杂对象的创建和部件的创建分别开来。分别用Builder类和Director类来表示。
下面以建造房子为例:
首先定义一个抽象类,它定义如何创建复杂对象的各个部件
package Builder;
public abstract class HouseBuilder
{
public abstract void BuildRoom(int roomNo);//构建房间
public abstract void BuildDoor(int room1, int room2);//构建门
//得到最后的房屋
public abstract House getHouse();
}//end abstract class HouseBuilder
用Director构建复杂对象(房子):
package Builder;
public class HouseDirector
{
public void createHouse(HouseBuilder concreteBuilder)
{
concreteBuilder.buildRoom(2);
concreteBuilder.buildDoor(3);
}//end createHouse(...)
}//end class HouseDirector
Builder的具体实现ConcreteHouseBuilder:通过完成Builder来构建产品(房子)的部件
package Builder;
public class ConcreteHouseBuilder extends HouseBuilder
{
private House house;
public ConcreteHouseBuilder()
{
house = new House();
}//end ConcreteHouseBuilder()
//创建屋子的数量
public void buildRoom(int roomNumber)
{
house.roomNumber = roomNumber;
}//end BuildRoom
//创建门的数量
public void buildDoor(int doorNumber)
{
house.doorNumber = doorNumber;
}
//返回创建好的房屋
public House getHouse()
{
return house;
}//end getHouse()
}//end class ConcreteHouseBuildera
具体的屋子:
package Builder;
public class House
{
int roomNumber;
int doorNumber;
public House()
{
roomNumber = 0;
doorNumber = 0;
}//end House()
public int getRoomNumber()
{
return roomNumber;
}//end getRoomNumber()
public int getDoorNumber()
{
return doorNumber;
}//end getDoorNumber()
}//end class House
Builder模式的具体运用:
/*
* BuilderPattern.java
*
* Created on
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package Builder;
/**
*
* @author Administrator
*/
public class BuilderPattern
{
House house;
ConcreteHouseBuilder houseBuilder;
HouseDirector houseDirecor;
public BuilderPattern()
{
house = new House();
houseBuilder = new ConcreteHouseBuilder();
houseDirecor = new HouseDirector();
}
public void createHouse()
{
houseDirecor.createHouse(houseBuilder);
house = houseBuilder.getHouse();
System.out.println("My house has room :" + house.getRoomNumber());
System.out.println("My house has door :" + house.getDoorNumber());
}//end creatHouse()
public static void main(String[] args)
{
System.out.println("The Builder Pattern!");
BuilderPattern bp = new BuilderPattern();
bp.createHouse();
}
}//end class BuilderPattern
最后的结果:
My house has room :2
My house has door :3
最后给出UML图:
小结:
当一个对象由复杂的部件构成时,我们可以试着去用Builder模式来实现。Builder模式将对象的组装过程和对象的部件分离。其实这也非常好理解。比如说汽车,汽车的生产和汽车发动机的生产是分开的。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=967906
- 设计模式----Builder(生成器)
- builder(生成器设计模式)
- 设计模式 - 生成器 Builder
- 设计模式->BUILDER(生成器)
- 设计模式----Builder(生成器)模式
- 【初学设计模式】Builder (生成器)
- 设计模式学习-Builder(生成器
- 生成器(Builder)设计模式
- 设计模式学习--生成器BUILDER
- 设计模式---生成器(Builder)
- Builder设计模式(生成器设计模式)
- 设计模式之Builder生成器模式
- C#设计模式-Builder生成器模式
- 设计模式之Builder(生成器模式)
- java设计模式 之生成器模式 Builder
- JAVA设计模式 — 生成器模式(Builder)
- 设计模式(2) 生成器模式(BUILDER)
- 设计模式9--生成器模式(Builder)
- 《设计模式精解》学习笔记(十四)------Template Method(模板方法)模式
- 《设计模式精解》学习笔记(十五)------FactoryMethod(工厂方法)模式
- 做树题目心得体会
- 《设计模式精解》学习笔记(十六)------总结
- Jabber学习笔记 之二
- 设计模式----Builder(生成器)模式
- 设计模式----Prototype(原形)模式
- 程序员考试笔记
- 设计模式----Composite(组合)模式
- 耳朵发热
- 设计模式----Flyweight(享元)模式
- 设计模式----Proxy(代理)模式
- 数据结构笔记
- .net精简框架集(WinCE平台下),XML反序列化成功与否与时间相关