java游戏服务器 建造者模式

这里的具体的建造者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

1/** * 小黄车 * @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; }} 2 3/** * 小蓝车 * @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 HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Python 设计模式之建造者模式 Builder Pattern

 引入建造者模式肯德基的菜单上有薯条,鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡,鸡肉卷等这些单品,也有很多套餐。比如套餐1:鸡翅,至尊虾汉堡,可乐,薯条套餐2:鸡腿,火腿汉堡,橙汁,薯条套餐3:。。。。。全家桶:。。。。。这种有各种各样的单品一步一步生成各种套餐,这种过程称的

Java进阶篇设计模式之三

前言在上一篇(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fxuwujing%2Fp%2F9363142.html)中我们学习了工厂模式,介绍了简单工厂模式、工厂方法和抽象工厂模式。本篇则介绍设计模式中属于创建型模式的建造者模式和原型模式。

Java中23种设计模式详解

Java中23种设计模式1\.设计模式31.1创建型模式41.1.1工厂方法41.1.2抽象工厂61.1.3建造者模式101.1.4单态模式131.1.5原型模式151.2结构型模式171.2.1适配器模式171.2.2桥接模式191.2.3组合

Java Design Patterns

java的设计模式大体上分为三大类:创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模

Java描述设计模式(06):建造者模式

一、生活场景基于建造者模式,描述软件开发的流程。1、代码实现/基于建造者模式描述软件开发/publicclassC01_InScene{publicstaticvoidmain(Stringargs){B

java游戏服务器 建造者模式 - HelloWorld