Builder设计模式(生成器设计模式)
来源:互联网 发布:linux设置用户环境变量 编辑:程序博客网 时间:2024/05/27 20:22
当需要构建内部结构复杂的对象的时候,就可以使用builder设计模式,使用该模式可以逐步的构造对象,使得对象的创建更加有弹性。该设计模式的关键就是将包含多个组件的的对象创建分多个步骤,并将这些步骤封装在一个生成器(Builder接口)中。
注意:构建的过程必须允许有不同的的表示。
一般的模式(四种角色):1、定义产品类,空参构造方法(产品 Car)
2、定义一个接口(Builder),在接口中定义产品每一部分实现的方法,方法返回Builder对象,并有一个组成产品的方法(抽象生成器)
3、实现接口(具体生成器)
4、组成产品的控制类(指挥者)
5、在具体操作类构建对象(使用)
提示:文中只是展示builder设计模式的代码过程
代码:
public class Car {
private String wheel;
private int color;
private String door;
public Car() {
}
public String getWheel() {
return wheel;
}
public void setWheel(String wheel) {
this.wheel = wheel;
}
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public String getDoor() {
return door;
}
public void setDoor(String door) {
this.door = door;
}
@Override public String toString() {
return "Car{" +
"wheel='" + wheel + '\'' +
", color=" + color +
", door='" + door + '\'' +
'}';
}
}
builder:
public interface Builder {
Builder buildPartA();
Builder buildPartB();
Builder buildPartC();
Car getProduct();
}
builder实现类:
在实现类中,可以实现我们需要的样式和组成的产品,对于默认的组件,可以空实现,也就是什么事也不做,这样可以通过这种方式构建不同的产品样式,这是builder设计模式的关键所在
public class ConcreteBuilder implements Builder {
private Car car;
public ConcreteBuilder() {
car=new Car();
}
@Override public Builder buildPartA() {
car.setColor(1);
return this;
}
@Override public Builder buildPartB() {
car.setDoor("4");
return this;
}
@Override public Builder buildPartC() {
car.setWheel("6");
return this;
}
@Override public Car getProduct() {
return car;
}
}
public class ConcreteBuilder2 implements Builder {
private Car car;
@Override public Builder buildPartA() {
car.setWheel("4");
return this;
}
@Override public Builder buildPartB() {
car.setColor(R.color.colorAccent);
return this;
}
@Override public Builder buildPartC() {
return null;
}
@Override public Car getProduct() {
return car;
}
}
组成类:
/**
* 内部实现组成
* @author panzhijie
* @version 2017-01-23 10:24
*/
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
//组成完整的对象
public void construct() {
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
}
}
调用:
ConcreteBuilder builder = new ConcreteBuilder();
Director director = new Director(builder);
//组成完整的产品
director.construct();
0 0
- Builder设计模式(生成器设计模式)
- 生成器(Builder)设计模式
- 设计模式---生成器(Builder)
- 设计模式----Builder(生成器)
- builder(生成器设计模式)
- 设计模式 - 生成器 Builder
- 设计模式->BUILDER(生成器)
- 设计模式之Builder(生成器模式)
- 设计模式9--生成器模式(Builder)
- 设计模式-生成器模式(Builder)
- 设计模式----Builder(生成器)模式
- 设计模式(三) 生成器(Builder)
- C# 设计模式-生成器(Builder)
- 【初学设计模式】Builder (生成器)
- 设计模式学习-Builder(生成器
- 设计模式学习--生成器BUILDER
- 设计模式之Builder生成器模式
- C#设计模式-Builder生成器模式
- NIO - Channel Foundation
- 各种提权、渗透经验技巧总结大全(上)
- JAVA之凯撒加密【解密】
- sql语句也可以写类似于if的判断
- 值得你关注的Android6.0上的重要变化(一)
- Builder设计模式(生成器设计模式)
- jq获取表单值与赋值代码
- NIO - FileChannel
- 插件化开发---DroidPlugin对Activity启动流程、生命周期的管理
- Codeforces Round #393 (Div. 1) 螺杆记
- NYOJ 1036 非洲小孩
- 系统内核开发:实现命令控制台
- NIO - File Locking
- 各种提权、渗透经验技巧总结大全(下)