java游戏服务器 建造者模式

**
*
* 抽象建造汽车父类
* @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();
}
/**
* 小黄车
* @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;
}
}
/**
* @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);
}
}
}
/**
* 指挥者类
* @author lizhibiao
* @date 2019/1/16 21:49
*/
public class Director
{
/**
* 建造过程
* @param builderCar 传入具体建造者,例如:小黄、小蓝
*/
public void build(AbstractBuilderCar builderCar)
{
builderCar.buildSteeringWheel();
builderCar.buildShell();
builderCar.buildWheel();
}
}
/**
* 测试类
* @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();
}
}
java游戏服务器 建造者模式的更多相关文章
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- Java 帝国之建造者模式
Java 帝国之建造者模式 原创: 王钦誉 码农翻身 今天 本文来自王钦誉的投稿,老刘做了较大修改. 原文地址: https://xiaoqinyu0000.github.io/2018/06/11/ ...
- Java 设计模式之建造者模式(四)
原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...
- java设计模式3——建造者模式
java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...
- Java游戏服务器成长之路——感悟篇
又是一个美好的周末啊,现在一到周末,早上就起得晚,下午困了又会睡一两个小时,上班的时候,早上起来喝一杯咖啡,然后就能高效的工作一整天,然而到了周末人就懒散了,哈哈. 最近刚跳槽,到新公司已经干了有两周 ...
- java设计模式之四建造者模式(Builder)
工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到 ...
- Java设计模式之三 ----- 建造者模式和原型模式
前言 在上一篇中我们学习了工厂模式,介绍了简单工厂模式.工厂方法和抽象工厂模式.本篇则介绍设计模式中属于创建型模式的建造者模式和原型模式. 建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用 ...
- Java游戏服务器搭建
一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简 ...
- java设计模式3.建造者模式、原型模式
建造者模式 一个产品常有不同的组成部分作为产品的零件,有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用,有些时候,一个对象的一些性质必须按照某个顺序赋值才 ...
随机推荐
- Linux用户组账号文件——group和gshadow
/etc/passwd文件中包含着每个用户的用户组ID(GID). /etc/group文件对用户组的许可权限的控制并不是必要的,这是因为Linux系统用来自于/etc/passwd文件的UID.G ...
- 最简单之在线安装mysql
1,下载Repo wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm 2,安装repo .n ...
- Error response from daemon: manifest for elasticsearch:latest not found
五孔 35个 三孔空调 3个 一开五孔 10个 一开双控 10个 两开双控 2个 一开多控 3个 ...
- dataGridView添加ComboBox 每行绑定不同的集合,显示默认值
好了 多说无意,直接上代码,看不看的懂,就看大家的了,解决问题后,可以评论回复,可以一起商讨一些疑难杂症 List<ProtocolInfo> list = piDB.FindAll(). ...
- Python和Sublime的整合
按照下面的方式也可以运行py代码,但是交互方式不是很好,主要简单介绍了一下Python和Sublime的整合 一 Ctrl + B 二 SublimeREPL 安装SublimeREPL 1.打开P ...
- JavaScript如何比较两个数组的内容是否相同
今天意外地发现JavaScript是不能用==或===操作符直接比较两个数组是否相等的. alert([]==[]); // false alert([]===[]); // false 以上两句代码 ...
- 22.Python赋值运算符(入门必读)
赋值运算符主要用来为变量(或常量)赋值,在使用时,既可以直接用基本赋值运算符“=”将右侧的值赋给左侧的变量,右侧也可以在进行某些运算后再赋值给左侧的变量. = 基本赋值运算符 Python 使用“=” ...
- JVM 监控工具——jstatd
1. 简介 jstatd是一个rmi的server应用,用于监控jvm的创建和结束,并且提供接口让监控工具(如visualvm)可以远程连接到本机的jvms . 注意是jvms,就是说运行jstatd ...
- 【python / mxnet / gluoncv / jupyter notebook】变换场景的同一行人多重识别
程序环境为高性能集群:CPU:Intel Xeon Gold 6140 Processor * 2(共36核心)内存:512GB RAMGPU:Tesla P100-PCIE-16GB * 2 数 ...
- Anaconda官网下载太慢/出错,以及Anaconda下载包又慢又出错的总体方法,应该如何快速下载,使用上海科技大学的开源镜像站即可
1.最新更新:清华源和中科大源都已经挂了,不要再用他们的镜像源了!!!用上海科技大学的镜像!!!! 2.其次,CSDN上大多的快速装包法都在现在(2019.5.11)出现了问题,也不全,本文是亲自实践 ...