
1.意图
分离复杂对象的构建和表示,同样的构建过程可以创建不同的表示
2.应用场景
- 一个类有很多属性,但是又不需要类初始化的时候把所有属性初始化
-
对数据库中某些对象初始化的时候
-
等等
3.基本的实现思路
- 定义Builer接口
- 接口内定义了建造者应该负责对象建造过程中的哪些事
- 👉如
TerrainBuilder接口
- 实现Builder实体类
- Builder实体类应该去实现对于对象建造过程方法
- 👉如
ComplexTerrainBuilder类
- 构造某些复杂对象时由
Builer代替普通构造方法去负责这个对象的创建过程
4.代码实现
对于一张游戏地图,可能会有很多不同的元素,如墙,堡垒,地雷,等等
我们又不需要在地图这个类初始化的时候将所有地形元素初始化
或者说我们可以根据自己的选择去构造一个地图
a).定义Builder接口
1 2 3 4 5 6 7
|
public interface { TerrainBuilder buildWall(); TerrainBuilder buildFort(); TerrainBuilder buildMine(); Terrain build(); }
|
b).实现Builder实体类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
public class ComplexTerrainBuilder implements { Terrain terrain = new Terrain();
public TerrainBuilder buildWall() { terrain.w = new Wall(10, 10, 50, 50); return this; }
public TerrainBuilder buildFort() { terrain.f = new Fort(10, 10, 50, 50); return this; }
public TerrainBuilder buildMine() { terrain.m = new Mine(10, 10, 50, 50); return this; }
public Terrain build() { return terrain; } }
|
c).建造对象过程
1 2 3 4 5
|
public static void main(String[] args) { TerrainBuilder builder = new ComplexTerrainBuilder(); Terrain t = builder.buildFort().buildMine().buildWall().build(); }
|
补充说明
- 无需记忆,自然使用
- 对于构建方法传参非常多的时候,考虑用
Builder模式
- 不使用建造者模式也是可以的,按具体情况决定
近期评论