生成器(Builder)
来源:互联网 发布:12864与单片机仿真 编辑:程序博客网 时间:2024/06/06 20:34
前言:生成器模式将对象的构建步骤与对象的表示分离开来,使得相同的步骤能够产生具有不同表示(结构)的对象。
栗子
类图
角色及职责说明
1、Vehicle、Car、Bus都是产品,其中Vehicle是产品抽象类;
2、VehicleBuilder,Vehicle的Builder,用于指定生产一个Vehicle包含哪些构造步骤;CarBuilder继承了VehicleBuilder,在对应的构造步骤中指定Car对象的具体表现形式;BusBuilder在对应的构造步骤中指定Bus对象的具体表现形式;
3、VehicleDirector,充当VehicleBuilder与Client(客户端)之间的桥梁,控制生产Vehicle时每个步骤的具体执行次序,并把成品Vehicle对象交给Client。
程序语言
三个产品类
public class Vehicle {//包含车轮、车身、车窗、车座等属性}public class Car extends Vehicle {}public class Bus extends Vehicle {}
VehicleBuilder
/** * 定义了生产Vehicle的步骤 */public abstract class VehicleBuilder { public abstract void buildWheels(); public abstract void buildBody(); //提供默认实现 public void buildWindows() { } public abstract void buildSeats(); //将生产的产品反出 public abstract Vehicle getVehicle();}
CarBuilder
/** * 定义了Car(轿车)是如何表示的。 */public class CarBuilder extends VehicleBuilder { private Car car = new Car(); @Override public void buildWheels() { System.out.println("给car安装4个小车轮。"); } @Override public void buildBody() { System.out.println("给car安装车身。"); } @Override public void buildSeats() { System.out.println("给car安装5个轿车车座。"); } @Override public Vehicle getVehicle() { return car; } @Override public void buildWindows() { System.out.println("给car安装6扇轿车车窗。"); }}
BusBuilder
/** * 定义了Bus(公交车)如何表示。 */public class BusBuilder extends VehicleBuilder { private Bus bus = new Bus(); @Override public void buildWheels() { System.out.println("给bus安装4个大车轮。"); } @Override public void buildBody() { System.out.println("给bus安装公交车车身。"); } @Override public void buildSeats() { System.out.println("给bus多排公交车座椅。"); } @Override public void buildWindows() { System.out.println("给bus安装多扇公交车车窗。"); } @Override public Vehicle getVehicle() { return bus; }}
VehicleDirector
/** * 作为Client和Builder之间的桥梁 */public class VehicleDirector { private VehicleBuilder vehicleBuilder; public VehicleDirector(VehicleBuilder builder) { this.vehicleBuilder = builder; } public void setVehicleBuilder(VehicleBuilder vehicleBuilder) { this.vehicleBuilder = vehicleBuilder; } //指定生产Vehicle步骤的执行次序 public Vehicle createVehicle() { vehicleBuilder.buildBody(); vehicleBuilder.buildSeats(); vehicleBuilder.buildWheels(); vehicleBuilder.buildWindows(); return vehicleBuilder.getVehicle(); }}
客户端
public class Main { public static void main(String[] args) { System.out.println("*************第一天******************"); //生产轿车 CarBuilder carBuilder = new CarBuilder(); VehicleDirector director = new VehicleDirector(carBuilder); Vehicle vehicle = director.createVehicle(); System.out.println("生产好了" + vehicle.getClass().getSimpleName()); System.out.println("*************第二天******************"); //生产公交车 BusBuilder busBuilder = new BusBuilder(); director.setVehicleBuilder(busBuilder); vehicle = director.createVehicle(); System.out.println("生产好了" + vehicle.getClass().getSimpleName()); }}
客户端执行结果
*************第一天******************给car安装车身。给car安装5个轿车车座。给car安装4个小车轮。给car安装6扇轿车车窗。生产好了Car*************第二天******************给bus安装公交车车身。给bus多排公交车座椅。给bus安装4个大车轮。给bus安装多扇公交车车窗。生产好了Bus
生成器模式效果
1、将对象(产品)的生产步骤与产品的具体表示分离开来,分别由抽象Builder和具体Builder来负责;
2、可以方便的扩展具有新的表现形式的对象(产品),可以方便的控制每个步骤的具体执行行为。
0 0
- Builder(生成器模式)
- Builder(生成器)模式
- 3.2生成器(Builder)
- Builder(生成器模式)
- 生成器模式(Builder)
- 生成器模式(Builder)
- 生成器(Builder)
- 生成器模式(Builder Pattern )
- 生成器(Builder)设计模式
- 设计模式---生成器(Builder)
- Builder(生成器)
- Builder - 生成器
- 生成器(Builder)
- Builder 生成器(创建型模式)
- 4.Builder 生成器(创建型模式)
- 设计模式之Builder(生成器模式)
- builder(生成器/建造者模式)
- Builder(构建器,生成器)模式
- shell循环2.while、until、select循环和循环控制
- 算法系列—自底向上归并排序
- C语言实现:复制输入字符,且有多个连续空格时只输出一个
- 30. Substring with Concatenation of All Words
- Unity整理内容方便初学者查看(第三篇_刚体,碰撞及射线)
- 生成器(Builder)
- 软件开发工具锦集(持续更新中)
- CodeForces 90B African Crossword【模拟】
- 从c++到c#转换中的一些不同
- P1094 纪念品分组
- 汉诺塔相关,递归(新汉诺塔问题,uva 10795)
- springMVC 用超链接做国际化
- reset.css文件
- yum-crond 是用于自动更新的包