构建器模式

1. 概念

建造者模式(Builder Pattern) 又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。

建造者模式就是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

2. 适用场景

需要生成的产品对象内部结构复杂;
需要生成的产品对象属性相互依赖;
需要生成的产品对象使用其他不易得到对象;

3. 代码示例分析

构建器模式_第1张图片
屏幕快照 2021-01-17 下午11.06.02.png

故事情节是这样的:我发现我儿子(8岁)现在对游戏很迷恋(当然了我会限制他的时间),现在也是正值寒假期间嘛,观察了一下,他最近经常看《我的世界》的攻略视频。其中有个场景是建造地形,地形也是比较复杂的,分为墙、堡垒、矿井等。
好了废话不多说,直接上代码

  • 待构建的地形类-Terrain:
// 地形
public class Terrain {
    Wall w;
    Fort f;
    Mine m;
}
// 城墙
class Wall {
    int x, y, w, h;

    public Wall(int x, int y, int w, int h) {
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
    }
}
// 堡垒
class Fort {
    int x, y, w, h;

    public Fort(int x, int y, int w, int h) {
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
    }

}
// 矿井
class Mine {
    int x, y, w, h;

    public Mine(int x, int y, int w, int h) {
        this.x = x;
        this.y = y;
        this.w = w;
        this.h = h;
    }
}
  • 抽象地形建造-TerrainBuilder:
public interface TerrainBuilder {
    TerrainBuilder buildWall(); // 返回值这里用了点小技巧【醒目】,到场景类就可以看到
    TerrainBuilder buildFort();
    TerrainBuilder buildMine();
    Terrain build();
}
  • 具体的构建者 - ComplexTerrainBuilder:
public class ComplexTerrainBuilder implements TerrainBuilder {
    Terrain terrain = new Terrain(); // 待构建的复杂对象
    @Override
    public TerrainBuilder buildWall() {
        terrain.w = new Wall(10, 10, 50, 50);
        return this;
    }
    @Override
    public TerrainBuilder buildFort() {
        terrain.f = new Fort(10, 10, 50, 50);
        return this;
    }
    @Override
    public TerrainBuilder buildMine() {
        terrain.m = new Mine(10, 10, 50, 50);
        return this;
    }
    @Override
    public Terrain build() {
        return terrain;
    }
}
  • 场景类 - Director:
public class Director {
    TerrainBuilder builder = new ComplexTerrainBuilder();
    Terrain t = builder.buildFort().buildMine().buildWall().build(); // 链式
} 

4. 总结

  • 建造模式分为两个很重要的部分:
    Builder接口:定义了如何构建各个部件。
    Director角色:负责整体的构建算法,通常是分步骤的构建产品。

  • 建造模式的核心:
    在于分离构建算法和具体构造的实现,从而使得构建算法可重用,具体的构造实现可以方便扩展和切换,从而可以灵活地构造出不同的产品对象。

  • 建造模式 VS 抽象工厂:
    工厂模式实现:获取对象;
    建造模式实现:创建对象;
    抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式不需要关心构建过程,只关心什么产品由什么工厂生产即可。而建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品。

————————————————————
坐标帝都,白天上班族,晚上是知识的分享者
如果读完觉得有收获的话,欢迎点赞加关注

你可能感兴趣的:(构建器模式)