建造者模式(创建型)

建造者模式(Builder Pattern)又称生成器模式:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。

三个角色:建造者具体的建造者被建造对象使用者(严格来说不算)

  •  建造者角色:定义生成实例所需要的所有方法
  •  具体的建造者角色:实现生成实例所需要的所有方法,并且定义获取最终生成实例的方法
  •  被建造对象:被构建的对象
  •  使用者:使用建造者模式。

注意:定义中“将一个复杂的构建过程与其表示相分离”,各个不同的建造者分别负责实现构建过程中所用到的所有构建步骤。

 第一步、创建构建者接口或者抽象类 

/**
 * 建造者抽象类也可以是接口
 */
public interface Builder {
    Builder buildWall();
    Builder buildFort();
    Builder buildMine();
    Terrain build();
}

第二部、创建具体的构建者和被构建对象

/**
 * 地形类
 */
public class Terrain {
    Wall w;
    Mine m;
    Fort f;
}
/**
 * 墙
 */
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 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;
    }
}
/**
 * 要塞
 */
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;
    }
}
package 创建型.builder;

/**
 * 复杂地形构建(具体建造者)
 */
public class ComplexTerrainBuilder implements Builder {
    Terrain terrain = new Terrain();

    /**
     * 构建墙
     */
    @Override
    public Builder buildWall() {
        terrain.w = new Wall(10, 10, 50, 50);
        return this;
    }

    /**
     *构建矿
     * @return
     */
    @Override
    public Builder buildMine() {
        terrain.m = new Mine(10, 10, 50, 50);
        return this;
    }

    /**
     *构建要塞
     * @return
     */
    @Override
    public Builder buildFort() {
        terrain.f = new Fort(10, 10, 50, 50);
        return this;
    }

    /**
     * 返回被构建对象
     * @return
     */
    @Override
    public Terrain build() {
        return terrain;
    }
}

第三步、具体的构建使用如下

public class Client {
    public static void main(String[] args) {
        Builder builder = new ComplexTerrainBuilder();
        //可以自定义构建地形
        Terrain t1 = builder.buildWall().buildMine().build();                //构建地形1(包含墙、矿)
        Terrain t2 = builder.buildWall().buildFort().build();                //构建地形2(包含墙、要塞)
        Terrain t3 = builder.buildFort().buildMine().buildWall().build();    //构建地形2(包含墙、矿、要塞)
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值