建造者模式应用场景
使用全景模式或者多张曝光合成,表现大场景细节 #生活知识# #摄影技巧# #风光摄影#
建造者模式:建造者模式,又称构建者模式,将一部负责对象的构建分为许多小对象的构建,最后在整合构建的模式。
构建者模式一般用在构建流程或者组成部件固定的场合,将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。
这里引用下别人画的类图:
成员分析:
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中的常用设计模式——设计模式的基本思想与应用场景
小厨房场景建模教程