建造者模式应用场景

发布时间:2024-12-27 09:43

使用全景模式或者多张曝光合成,表现大场景细节 #生活知识# #摄影技巧# #风光摄影#

建造者模式:

       建造者模式,又称构建者模式,将一部负责对象的构建分为许多小对象的构建,最后在整合构建的模式。

     构建者模式一般用在构建流程或者组成部件固定的场合,将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。

这里引用下别人画的类图:

                        

成员分析:

    Director:控制者类,这是控制整个组合过程,在这个类内部有个Construct()方法,这个方法的作用就是通过调用Builder内部的各个组件的生成方法来完成组装;

    Builder:构建者接口,定义各部件生成的方法;

    ConcreteBuilder:具体构建者类:实现Builder构建者接口,具体定义如何生成各个部件;依赖于Product成品类,其中还有获取成品组装结构的方法GetResult()方法;

    Product:成品类

【关于建造者模式,我觉得理解一句话很重要】:

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

直接进入例子:

场景:玩过英雄联盟的朋友们都知道,当自己电脑配置太差时,游戏运行起来就特别卡顿。这时就可以手动设置降低游戏画质来达到游戏运行流畅的目的。发散思维,如果我们能控制画面某些不必要的元素,让其不渲染,也可以达到画面不卡顿。这样,我们只需要在设置界面里,设置下,画面的清晰度,不要哪些元素。然后点下按钮,告诉程序我就要这样的质感。我们并不知道程序是怎么构建的,我们知道的只是一个方法,关于构建,程序自动就帮我们构建好了。

代码演示:此处例子只是为了让各位更容易理解建造者模式。当然还有很多不足的地方,也有很多不合理的地方。希望各位不要在意这些细枝末节。理解很重要!!!

1、建造者模式包的结构 

2、先看这个包  com.test.element 这里是存放地图元素,地图中有树、道路、防御塔、野怪、等等。这里只列举部分。望各位体谅。代码多了,新手看起来老火。

(1)防御塔类DefenseTower.java。以下实体类皆省略get  set  及构造方法。

public class DefenseTower {

private int size;

private int x;

private int y;

private int aggressivity;

private int defenseValue;

}

(2)也怪类:Monster.java

public class Monster {

private int size;

private int x;

private int y;

private int aggressivity;

private int defenseValue;

}

(3)道路类:Road .java

public class Road {

private int width;

private int length;

private int x;

private int y;

}

(4)树类:Tree.java

public class Tree {

private String color;

private int size;

private int x;

private int y;

}

2、com.test.resources 包下的 Resources.java类为模拟用户下载的地图资源

public class Resources {

public DefenseTower getDefenseTower(){

return new DefenseTower(12, 50, 50, 100, 80);

}

public Road getRoad(){

return new Road(300, 2000, 50, 50);

}

public Tree getTree(){

return new Tree("绿色", 5, 20, 100);

}

public Monster getMonster(){

return new Monster(18, 60, 150, 75, 40);

}

}

3、com.test.build 包下是重点

(1)、构建地图的接口:Build.java  对应于建造者角色中的Builder:构建者接口

public interface Build {

Build buildDefenseTower(DefenseTower defenseTower);

Build buildRoad(Road road);

Build buildTree(Tree tree);

Build buildMonster(Monster monster);

Build buildMusic(String music);

Build buildPx(String px);

Map getMap();

}

(2)、具体实现构建地图接口类:CreateMap.java  对应于建造者角色中的ConcreteBuilder:具体构建者类

public class CreateMap implements Build{

private Map map = new Map();

@Override

public Map getMap() {

return map;

}

@Override

public CreateMap buildDefenseTower(DefenseTower defenseTower) {

map.setDefenseTower(defenseTower);

return this;

}

@Override

public CreateMap buildRoad(Road road) {

map.setRoad(road);

return this;

}

@Override

public CreateMap buildTree(Tree tree) {

map.setTree(tree);

return this;

}

@Override

public CreateMap buildMonster(Monster monster) {

map.setMonster(monster);

return this;

}

@Override

public CreateMap buildMusic(String music) {

map.setMusic(music);

return this;

}

@Override

public CreateMap buildPx(String px) {

map.setPx(px);

return this;

}

}

(3)、建造者类:Director.java  执行地图的各种元素构建,组装,最后生成地图 

public class Director {

private Build build = new CreateMap();

private Resources resources = new Resources();

public Map createMap(String px,boolean ishasMusic){

build.buildRoad(resources.getRoad())

.buildDefenseTower(resources.getDefenseTower())

.buildTree(resources.getTree())

.buildMonster(resources.getMonster())

.buildMusic(ishasMusic==true?"加载音乐":"无音乐")

.buildPx(px);

return build.getMap();

}

}

(4)、地图类:Map.java 地图的组成部分。 对应于建造者角色中的 Product:成品类

public class Map {

private DefenseTower defenseTower;

private Road road;

private Tree tree;

private Monster monster;

private String music;

private String px;

}

4、com.test.clienter 包 中的 Clienter.java 类为模拟客户端

public class Clienter {

public static void main(String[] args) {

Director director = new Director();

Map createMap = director.createMap("100%", true);

System.out.println(createMap);

Map createMap1 = director.createMap("80%", true);

System.out.println(createMap1);

Map createMap2 = director.createMap("50%", false);

System.out.println(createMap2);

}

}

总结:

不用知道建造过程,就可以构建不同的东西。在构建地图的过程中,也就是用户委托Director这个类去构建对象,在Director这个类中,我们还可以判断,用户输入的像素,如果低于什么,我们就选择不构建某些东西。其构建算法程序定,具体构建什么,用户定。

代码demo:https://github.com/alwaysInRoad/test-builder-pattern.git

如果觉得对你有帮助,乃是我莫大荣幸。若有不懂的地方,可以给我留言,或者加我qq:1226500260

博主百忙之中抽出时间写博客,实属不易,如有转载,请标明出处哦~~~~

网址:建造者模式应用场景 https://www.yuejiaxmz.com/news/view/581974

相关内容

装饰者模式的应用场景
观察者模式应用场景实例
23种设计模式总结及应用场景
场景数字化:构建场景驱动的发展模式
建造者模式和工厂模式建造者模式 生活场景 想象要生产一辆汽车,我们是不是有需要有很多个流程?轮胎,车盖,引擎... 你告
书店建模场景布置方案,植物建模场景布置方案
java代理模式的应用场景
场景模式
【JAVA】Java高级:Java中的常用设计模式——设计模式的基本思想与应用场景
小厨房场景建模教程

随便看看