建造者模式-JAVA代码实现

新建地图接口:

package map_package;

public interface map_interface {

public void create_weather();

public void create_house();

public void create_tree();

public void create_way();
}

新建晴天地图类:

package map_package;

public class map_sun implements map_interface {

public void create_weather() {
        System.out.println("晴天");
    }

public void create_house() {
        System.out.println("房了上玻璃发亮");
    }

public void create_tree() {
        System.out.println("树的颜色是浅绿色");
    }

public void create_way() {
        System.out.println("路面有些干燥");
    }

}

新建阴天地图类:

package map_package;

public class map_cloudy implements map_interface{

public void create_weather() {
        System.out.println("阴天");
    }

public void create_house() {
        System.out.println("房了上玻璃发暗");
    }

public void create_tree() {
        System.out.println("树的颜色是深绿色");
    }

public void create_way() {
        System.out.println("路面有些潮湿");
    }

}

新建高画质builder建造者类:

package map_build;

import map_package.map_interface;

public class map_build_adv {

private map_interface map_interface_ref;

public map_build_adv(map_interface map_interface_ref) {
        super();
        this.map_interface_ref = map_interface_ref;
    }

public void create_map() {
        System.out.println("创建一个高画质的地图");
        // 创建的顺序很重要 从天空往路面创建
        map_interface_ref.create_weather();
        map_interface_ref.create_house();
        map_interface_ref.create_tree();
        map_interface_ref.create_way();

}

}

新建低画质builder建造者类:

package map_build;

import map_package.map_interface;

public class map_build_low {

private map_interface map_interface_ref;

public map_build_low(map_interface map_interface_ref) {
        super();
        this.map_interface_ref = map_interface_ref;
    }

public void create_map() {
        System.out.println("创建一个低画质的地图");
        // 创建的顺序很重要 从天空往路面创建
        map_interface_ref.create_weather();
        map_interface_ref.create_house();
        // map_interface_ref.create_tree();将创建树的过程去掉
        map_interface_ref.create_way();

}

}

新建客户端运行类:

package run_main;

import map_build.map_build_adv;
import map_build.map_build_low;
import map_package.map_cloudy;
import map_package.map_sun;

public class run_main {

public static void main(String[] args) {

map_cloudy map_cloudy = new map_cloudy();
        map_build_adv map_build_adv = new map_build_adv(map_cloudy);
        map_build_adv.create_map();

System.out.println();

map_sun map_sun = new map_sun();
        map_build_low map_build_low = new map_build_low(map_sun);
        map_build_low.create_map();

}

}

程序运行结果如下:

创建一个高画质的地图
阴天
房了上玻璃发暗
树的颜色是深绿色
路面有些潮湿

创建一个低画质的地图
晴天
房了上玻璃发亮
路面有些干燥

从程序中可以看到,建造者模式将不变的创建过程进行封装,创建的过程与main分法进行分离,这样内部的创建过程就和表示层的代码进行分开,有利于创建过程功能上的修改。另外可以发现,代码的设计和功能有些类似于facade外观模式,区别在于,建造者模式目的在于以相同的构建过程通过不同的建造者得到不同的结果,而外观模式并不需要不同的建造者,也不希望得到不同的结果,只是简单的将几个接口合并成高级的一个接口,不影响原有的结果,目的是使调用变得更加容易。

本程序中有2个建造者:高画者建造者和低画质建造者,它们都封装了创建地图的过程,这个过程很固定,但通过不同的建造者类可以返回不样式的地图,建造者规定了对象创建的过程,比如高画质的建造者的创建过程为:

map_interface_ref.create_weather();
map_interface_ref.create_house();
map_interface_ref.create_tree();
map_interface_ref.create_way();

必须得执行4个方法才可以创建一个高画质的地图,如果不使用建造者模式,直接调用map类的create_xxxx方法,如果create_xxxx方法有几十个,那么很有可能就把其中的某些方法忘记调用而影响最终地图的效果了,所以我们要使用建造者模式来规定地图创建的过程,这就是一个“行为守则”。

建造者模式-JAVA代码实现相关推荐

  1. 设计建造者模式java代码,Java设计模式-建造者模式

    定义 Separate the construction of a complex object from its representation so that the sameconstructio ...

  2. Java设计模式-建造者模式 理论代码相结合

    继工厂模式后的建造者模式,也是java中常常能够见到的模式一种,应用场景也比较广,比较好用. 大家想了解的话,一起来看一看啦.

  3. 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用

    今天白天主要看了boost库的应用,主要是经常使用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模 ...

  4. 命令模式 Java代码演示【使用命令模式实现播放器功能】

    文章目录 模式介绍 模式的结构与实现 命令模式扩展(实现播放器功能) 模式介绍 命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开.这样俩者之前通过 ...

  5. flyweight模式 java代码_享元模式(Flyweight)_java实现

    //20210120 写在前面:刚期末考试完,考了面向对象,里边儿有23个设计模式,我寻思着考完挨个儿实现一下,本文实现适配者模式 核心思想 如果在一个类中频繁创建内容相同的对象,则会使内存占用很高, ...

  6. 设计模式-极品飞车-【建造者模式】

    [建造者模式应用场景举例] 比如在玩"极品飞车"这款游戏,那么每一关的地图会千变万化,简单的来说,地图会有晴天和阴天之分,那么创建地图时就要根据晴天或者阴天来对地图上的场景,比如: ...

  7. Java设计模式之创建型:建造者模式

    一.什么是建造者模式: 建造者模式将复杂产品的创建步骤分解在在不同的方法中,使得创建过程更加清晰,从而更精确控制复杂对象的产生过程:通过隔离复杂对象的构建与使用,也就是将产品的创建与产品本身分离开来, ...

  8. 重学Java设计模式-创建者模式-建造者模式

    重学Java设计模式-创建者模式-建造者模式 内容摘自:重学 Java 设计模式:实战建造者模式「各项装修物料组合套餐选配场景」 | bugstack 虫洞栈 建造者模式介绍 图片来自:https:/ ...

  9. Java设计模式10,建造者模式

    目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...

最新文章

  1. 1357篇ECCV 2020论文打包下载!奖项公布:李飞飞高徒获最佳论文奖
  2. 《京东峰值系统设计》读后感
  3. 根据.Net代码自动生成UML Sequence 图。
  4. 转 使用putty从linux主机上面往windows主机下面拷贝文件
  5. 异常检测-孤立森林(IsolationForest)
  6. 采用Flume实时采集和处理数据
  7. 史上最简单的SpringCloud教程 | 第十一篇: docker部署spring cloud项目
  8. java.lang.ClassCastException: cannot assign instance of java.lang.invoke.SerializedLambda to field
  9. 前端学习(1796):前端调试之html/css介绍
  10. R之data.table速查手册
  11. Swift 获取字符的个数 、字符串的遍历
  12. 使用iMazing将iphone的联系人信息导出至电脑
  13. 【C++】指针遍历二维数组若干种方法小结
  14. Skyline Web 二次开发- 1.地图显示、Position、AttachEvent
  15. 实现基于Keepalived高可用集群网站架构的多种方法
  16. autojs java文件_autojs官方文档
  17. 项目管理学习总结(11)——项目管理怎么做
  18. ar面部识别_人脸识别、AR
  19. WEB应用之JSP+Servlet
  20. 麻雀要革命 第三章 宣战!麻雀联盟的华丽出击 第二节

热门文章

  1. 漫画 | 程序员才是真正的“甩锅”大师!
  2. 【转载】测试工程师怎么甩锅
  3. 三星s7edge手机无法连接adb问题
  4. oracle rownum left join,SQL常用指令集(Oracle)
  5. 微信公众平台开发 上传下载多媒体文件
  6. 美国计算机硕博连读最快几年,美国硕博连读要几年?哪些大学开设?
  7. python scrapy 爬取包含iframe标签内的数据
  8. Python基础之集合set操作
  9. Android 之路34---Dialog
  10. 两年多里自己都干了什么?