这里的具体的建造者ConcreteBuilder可以多个

这里我们以建造汽车为例:
假设汽车需要:方向盘、汽车壳、还有四个轮子  ---------这三样才能跑起来
如果你因为粗心漏了其中的某个建造过程(例如:忘了装方向盘),那么汽车就跑不起来。


有什么方法可以避免粗心,漏了其中的某个过程?

代码如下:
1.Builder类 为 AbstractBuilderCar
**
*
* 抽象建造汽车父类
* @author lizhibiao
* @date 2019/1/16 21:34
*/
public abstract class AbstractBuilderCar
{
/**
* 抽象的----建造方向盘方法
*/
public abstract void buildSteeringWheel();

/**
* 抽象的----安上汽车壳
*/
public abstract void buildShell();

/**
* 抽象的----安上轮子
*/
public abstract void buildWheel();

/**
* 获取汽车
* @return 返回汽车类
*/
public abstract Car getCar();

}

这里最核心的地方是: 
首先 AbstractBuilderCar是一个抽象类
然后 它的方法都是抽象方法,这么做的必要是为了让子类继承时,都必须实现抽象方法,避免粗心,漏掉其中的某个建造过程。(子类是不是抽象类,那么继承抽象父类时,必须实现所有的抽象方法,否则报错)
最后,有一个获取汽车类


2.两个ConcreteBuilder类(小黄车和小蓝车),继承Builder
/**
* 小黄车
* @author lizhibiao
* @date 2019/1/16 21:43
*/
public class YellowCar extends AbstractBuilderCar
{

private Car car = new Car();

@Override
public void buildSteeringWheel()
{
car.add("1.装上方向盘");
}

@Override
public void buildShell()
{
car.add("2.装上黄色的车壳");
}

@Override
public void buildWheel()
{
car.add("3.最后安上四个轮子");
}

@Override
public Car getCar()
{
return car;
}
}
/**
* 小蓝车
* @author lizhibiao
* @date 2019/1/16 21:46
*/
public class BlueCar extends AbstractBuilderCar
{
private Car car = new Car();

@Override
public void buildSteeringWheel()
{
car.add("1.装上方向盘");
}

@Override
public void buildShell()
{
car.add("2.装上蓝色的车壳");
}

@Override
public void buildWheel()
{
car.add("3.最后安上四个轮子");
}

@Override
public Car getCar()
{
return car;
}
}


3.Car类
/**
* @author lizhibiao
* @date 2019/1/16 21:52
*/
public class Car
{
/**
* 建造步骤list
*/
private List<String> list = new ArrayList<>();

/**
* 添加汽车建造步骤
*/
public void add(String steps)
{
list.add(steps);
}

/**
* 打印汽车
*/
public void printCar()
{
for (String stepInfo : list)
{
System.out.println(stepInfo);
}
}

}


4.指挥者类
/**
* 指挥者类
* @author lizhibiao
* @date 2019/1/16 21:49
*/
public class Director
{

/**
* 建造过程
* @param builderCar 传入具体建造者,例如:小黄、小蓝
*/
public void build(AbstractBuilderCar builderCar)
{
builderCar.buildSteeringWheel();
builderCar.buildShell();
builderCar.buildWheel();
}

}


5.测试类
/**
* 测试类
* @author lizhibiao
* @date 2019/1/17 15:05
*/
public class Main
{
public static void main(String[] args)
{
//指挥者
Director director = new Director();

//new一个小黄车,多态,返回的是抽象父类
AbstractBuilderCar buildYellowCar = new YellowCar();
//按顺序建造汽车
director.build(buildYellowCar);
//获取小黄车
Car yellowCar = buildYellowCar.getCar();
//打印建造过程
yellowCar.printCar();

System.out.println("=======================");
System.out.println("=======================");

//建造小蓝车
AbstractBuilderCar buildBlueCar = new BlueCar();
director.build(buildBlueCar);
Car blueCar = buildBlueCar.getCar();
blueCar.printCar();

}
}


输出结果:
1.装上方向盘
2.装上黄色的车壳
3.最后安上四个轮子
=======================
=======================
1.装上方向盘
2.装上蓝色的车壳
3.最后安上四个轮子

java游戏服务器 建造者模式的更多相关文章

  1. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  2. Java 帝国之建造者模式

    Java 帝国之建造者模式 原创: 王钦誉 码农翻身 今天 本文来自王钦誉的投稿,老刘做了较大修改. 原文地址: https://xiaoqinyu0000.github.io/2018/06/11/ ...

  3. Java 设计模式之建造者模式(四)

    原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...

  4. java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

  5. Java游戏服务器成长之路——感悟篇

    又是一个美好的周末啊,现在一到周末,早上就起得晚,下午困了又会睡一两个小时,上班的时候,早上起来喝一杯咖啡,然后就能高效的工作一整天,然而到了周末人就懒散了,哈哈. 最近刚跳槽,到新公司已经干了有两周 ...

  6. java设计模式之四建造者模式(Builder)

    工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到 ...

  7. Java设计模式之三 ----- 建造者模式和原型模式

    前言 在上一篇中我们学习了工厂模式,介绍了简单工厂模式.工厂方法和抽象工厂模式.本篇则介绍设计模式中属于创建型模式的建造者模式和原型模式. 建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用 ...

  8. Java游戏服务器搭建

    一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简 ...

  9. java设计模式3.建造者模式、原型模式

    建造者模式 一个产品常有不同的组成部分作为产品的零件,有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用,有些时候,一个对象的一些性质必须按照某个顺序赋值才 ...

随机推荐

  1. P2664 树上颜色统计 点分治 虚树 树上差分 树上莫队

    树上差分O(n)的做法 考虑每种颜色对每个点的贡献,如果对于每种颜色我们把当前颜色的点删除,那么原来的树就会分成几个子树,对于一个点,当前颜色在和他同子树的点的点对路径上是不会出现的.考虑到有多种颜色 ...

  2. Blend Visual studio 和Visual studio 的区别

    blend for visual studio 这个并不是用于开发中写代码的,而是专门用来做WPF的界面设计的.这是为了让专业的人做专业的事,尽量让写代码的人只使用visual studio,而做界面 ...

  3. linux 安装weblogic(转载)

    整个过程大同小异,不再笔记,就摘了网上的一篇. 原文地址:http://www.cnblogs.com/walk-the-Line/p/5409094.html 一.安装weblogic10.3.6 ...

  4. springmvc后台获取表单提交的数据——@ModelAttribute等方式

    1.通过注解ModelAttribute直接映射表单中的参数到POJO.在from中的action写提交的路径,在input的name写参数的名称. package com.demo.model; p ...

  5. 题解 矩阵 matrix

    矩阵 matrix Description 给出一个 n × m 的矩阵.请在其中选择至多 3 个互不相交的,大小恰为 k × k 的子矩阵,使得子矩阵的 权值和最大. Input 第一行三个整数 n ...

  6. struts2数据类型转换DefaultTypeConverter

    转https://www.cnblogs.com/IT-1994/p/5998458.html 一.前言 笔者一直觉得,学习一个知识点,你首先要明白,这东西是什么?有什么用?这样你才能了解.好了,不说 ...

  7. 钉钉报警-prometheus-alertmanager

    alertmanager alertmanager可以放在远程服务器上 报警机制 在 prometheus 中定义你的监控规则,即配置一个触发器,某个值超过了设置的阈值就触发告警, prometheu ...

  8. React事件,修改this.state的值

    1.React中绑定事件 React中绑定事件格式: onClick = { function } React中绑定事件的标准用法: import React from 'react' export ...

  9. Java进阶知识01 Struts2下的 jquery+ajax+struts 技术实现异步刷新功能

    1.效果图示 横线上方的部分不动(没有刷新),下方实现刷新(异步刷新) 2.实现步骤 jquery+ajax+struts技术实现异步刷新功能的步骤:    1.需要用到 jquery+ajax+st ...

  10. codeforces412A

    Poster CodeForces - 412A The R1 company has recently bought a high rise building in the centre of Mo ...