【建造者模式应用场景举例】

比如在玩“极品飞车”这款游戏,那么每一关的地图会千变万化,简单的来说,地图会有晴天和阴天之分,那么创建地图时就要根据晴天或者阴天来对地图上的场景,比如:天空,树,房子,和路面进行渲染,这个过程是一个固定的,每创建一个新地图都要执行这几个渲染,这是针对高级配置的电脑来说的。

现在拥有低配置电脑的人不在少数,那么他们就不能玩游戏了吗?完全可以!只要将地图中占用资源比较高的渲染去掉就可以,比如带反射光影的树,这时候需要创建不同的地图,但地图的创建过程却是固定的,建造者模式完全可以应对这样的情况。

【建造者模式解释】

类型:创建模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

【建造者模式UML图】

【建造者模式-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方法有几十个,那么很有可能就把其中的某些方法忘记调用而影响最终地图的效果了,所以我们要使用建造者模式来规定地图创建的过程,这就是一个“行为守则”。

【建造者模式-MyEclipse6项目JAVA代码实现】

建造者模式builder示例代码:点击

设计模式-极品飞车-【建造者模式】相关推荐

  1. 设计模式之路 | 建造者模式

    模式的定义与特点 建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.它是将一个复杂的对象分解为多个简单的对象 ...

  2. 设计模式系列之建造者模式构建实体类

    设计模式系列之建造者模式(Build Pattern)构建实体类 模式定义 建造者模式属于23种设计模式中的创建型模式,可以理解为创建对象的一种很好的方法. 所谓建造者模式就是**将组件和组件的组件过 ...

  3. 设计模式---5(建造者模式的概念及其实现,建造者模式的角色与职责,建造者模式和工厂模式的区别)

    建造者模式 建造者模式的概念 Builder 模式也叫建造者模式或者生成器模式,是由 GoF 提出的 23 种设计模式中的一种. Builder 模式是一种对象创建型模式之一,用来隐藏复合对象的创建过 ...

  4. Java 设计模式情景分析——建造者模式

    当我们遇到类似汽车的装配,需要车轮.方向盘.发动机,还有各种小零件时,为了在构建过程中隐藏实现细节,就可以使用建造者模式 (Builder模式) 将部件和组装过程分离,使得构建过程和部件都可以自由扩展 ...

  5. 设计模式二:建造者模式

    建造者模式 想要创建一个由多个部分构成的对象,而且他的构成需要一步接一步地完成.只有当各个部分都创建好,这个对象才是完整的.这时就需要建造者模式 建造者设计模式:将一个复杂对象的构造过程与其表现分离, ...

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

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

  7. 【设计模式自习室】建造者模式

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范) 该模式的代码示例: ...

  8. 设计模式 之美 -- 建造者模式

    文章目录 1. 解决问题 2. 应用场景 3. 实现 C语言实现 C++实现 4. 缺点 1. 解决问题 描述如下场景: 类的数据成员很多(8个以上),当我们进行初始化的时候放在初始化列表中,影响类的 ...

  9. 设计模式入门:建造者模式

    UML类图 建造者模式 代码示例 Product /*** 表示具体的产品,由多个部件组成*/ public class Product {/*** 存放产品每个部件的集合*/private List ...

最新文章

  1. python实时处理_python实时处理log文件脚本
  2. R语言shapiro.test()函数实现Shapiro-Wilk正态分布检验
  3. AspectJ切入点语法详解
  4. Android加载大图片(压缩)
  5. 逆向工程(Reverse Engineering)
  6. [2DPIC调试笔记]parameter_antenna_radiation1013(3)
  7. Pandas高级教程之:category数据类型
  8. 慢速HTTP拒绝服务攻击
  9. Spring的依赖注入陷阱
  10. 《转》Ubuntu 12.04常用的快捷键
  11. Unity实现IOS原生分享
  12. VCSA 6.5 HA配置 之一:架构概览
  13. Fudan-NLP-Beginner:自然语言处理入门练习
  14. 什么是Robtos.txt 协议?
  15. 基于web在线餐饮网站的设计与实现——蛋糕甜品店铺(HTML+CSS+JavaScript)
  16. 激光光斑能量分布的matlab处理方法,激光光斑能量分布的MATLAB处理方法
  17. 【英语四六级-必背单词】高中英语单词 (E)-MP3试听与下载
  18. 四/六层板层叠设计思路
  19. js click与onclick事件绑定,触发与解绑
  20. Learn OpenGL 笔记5.11 Anti Aliasing(抗锯齿)

热门文章

  1. 服务器无限火力时间,LOL无限火力2021开放时间:2月5日开启
  2. Cocos Creator 2.0 正式版发布
  3. python爬虫设计刷博客访问量(刷访问量,赞,爬取图片)
  4. 修改deepin-qq缩放
  5. 2016物联网版图:物联网奇点是否已经来临?
  6. Markdown中的公式、字母表示汇总
  7. sqlite过期的解决办法
  8. 最便宜的html手机,最便宜骁龙865手机发布了,价格比你想象中的还低!
  9. vue 动态路由的实现(后台数据,前台拿到数据生成侧边栏)
  10. 十佳优质蛋白食物,你爱吃哪个