23种设计模式之建造者模式(Bulider模式)
转载地址:https://sscloud.net/solution/jsp/article.jsp?articleId=10088
模式的定义与特点
建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。
该模式的主要优点如下:
- 各个具体的建造者相互独立,有利于系统的扩展。
- 客户端不必知道产品内部组成的细节,便于控制细节风险。
其缺点如下:
- 产品的组成部分必须相同,这限制了其使用范围。
- 如果产品的内部变化复杂,该模式会增加很多的建造者类。
建造者(Builder)模式和工厂模式的关注点不同:建造者模式注重零部件的组装过程,而工厂方法模式更注重零部件的创建过程,但两者可以结合使用。
模式的结构与实现
建造者(Builder)模式由产品、抽象建造者、具体建造者、指挥者等 4 个要素构成,现在我们来分析其基本结构和实现方法。
1. 模式的结构
建造者(Builder)模式的主要角色如下。
- 产品角色(Product):它是包含多个组成部件的复杂对象,由具体建造者来创建其各个滅部件。
- 抽象建造者(Builder):它是一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。
- 具体建造者(Concrete Builder):实现 Builder 接口,完成复杂产品的各个部件的具体创建方法。
- 指挥者(Director):它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。
其结构图如图 1 所示。
图1 建造者模式的结构图
2. 模式的实现
以建房子demo说明建造者模式的用法
/**
* 建造者(Builder)模式是创建型模式,创建了一个对外隐藏创建过程的产品,使用组合的方式,由指挥者(Director)来决定建造的流程。
*
* 建造者模式:将各种产品集中起来进行管理,用来创建复合对象。
*
* 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
*
* @author sscloud.net E-mail:support@sscloud.net
* @Date 2019年1月20日下午7:16:44
* @version 1.0
* @since
**/
public class Demo {
public static void main(String[] args) {
HouseFactory factory = new HouseFactory();
HouseBuilder builder = new StandardMazeBuilder(factory);
Director director = new Director(builder);
director.construct();
System.out.println(builder.currentMaze.getRoomCount());
}
}
/**
* @Date 2018年7月29日19:49:01
* @fun Builder
* @author sscloud.net
*
*/
public abstract class HouseBuilder {
public abstract void Buildmaze();
public abstract void BuildRoom(int number);
public abstract void BuildDoor(int roomFrom, int roomTo);
public abstract House GetHouse();
public abstract HouseFactory getHouseFactory();
protected HouseBuilder(HouseFactory factory){
this.factory = factory;
}
protected HouseFactory factory;
protected House currentMaze;
}
/**
* @Date 2018年7月29日19:48:45
* @Fun Standard House Builder is created by Builber.
* @author sscloud.net
*
*/
public class StandardMazeBuilder extends HouseBuilder {
public StandardMazeBuilder(HouseFactory factory) {
// TODO Auto-generated constructor stub
super(factory);
}
@Override
public void Buildmaze() {
// TODO Auto-generated method stub
this.currentMaze = factory.MakeHouse();
}
。。。。。
/**
* 指挥者:指导 如何 建造
* @author sscloud.net E-mail:support@sscloud.net
* @Date 2019年1月20日下午7:29:25
* @version 1.0
* @since
**/
public class Director {
private HouseBuilder builder;
public Director(HouseBuilder builder) {
// TODO Auto-generated constructor stub
this.builder = builder;
}
/**
* 建造方法:定义了建造的流程
*/
public void construct(){
builder.Buildmaze();
builder.BuildRoom(1);
builder.BuildRoom(2);
builder.BuildDoor(1, 2);
}
}
- java 23种设计模式(4):建造者模式
- 23种设计模式之-建造者模式
- 23种设计模式--建造者模式-Builder Pattern
- GoF23种设计模式之创建型模式之建造者模式
- 23种设计模式(4):建造者模式
- 23种设计模式(5):建造者模式
- //c++ 23种设计模式之建造者模式2
- 走穿java23种设计模式-4建造者模式详解
- 23种设计模式(4):建造者模式
- 23种设计模式(4):建造者模式
- 使用Object-C实现23种设计模式之建造者模式
- 23种设计模式(4):建造者模式
- [设计模式之禅读书笔记]011_23种设计模式五:建造者模式
- 23种设计模式2--创建型模式(工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式)
- 23种设计模式(4):建造者模式
- 23种设计模式(4):建造者模式
- java23种设计模式-----建造者模式
- 23种设计模式03---建造者模式
- Java23种设计模式案例:建造者模式(builder)
- 【23种设计模式】创建型模式 > 建造者模式