【Java】Builder 建造者模式

简介:

建造者模式是日常开发中比较常见的设计模式,它的主要作用就是将复杂事物创建的过程抽象出来,该抽象的不同实现方式不同,创建出的对象也不同。通俗的讲,创建一个对象一般都会有一个固定的步骤,这个固定的步骤我们把它抽象出来,每个抽象步骤都会有不同的实现方式,不同的实现方式创建出的对象也将不同。举个常见的例子,想必大家都知道坦克大战这种小游戏,选择不同的模式有不同的地图(默认简单版的,复杂版的),我们选择简单版,那么构建出来的地图当中可能没有碉堡,地雷等等,选择复杂的版本可能就包含了这些东西,我们可以把这个地图的构建步骤抽象出来,根据不同的版本构建不同的内容。

使用场景:

如果一个类有多个构造函数,一般超过4个都算多了,且有些参数是可选的,我们就应该考虑用建造者模式来构建这个类的对象

模式结构:

【Java】Builder 建造者模式

从上图可以看到,Buider模式中有三个角色:

  1. 要建造的产品Product -- 构建的地图
  2. 抽象的Builder -- 构建碉堡,地雷,墙等内容
  3. Builder的具体实现SimpleBuilder、ComplexBuilder -- 对Builder中的构建步骤的实现

经典建造者模式实例:

接下来我们来看下用代码如何实现上述地图构建的过程:

1.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;

}

}

2、TerrainBuilder 抽象构建过程

package com.mashibing.Builder;

public interface TerrainBuilder {

TerrainBuilder buildWall();

TerrainBuilder buildFort();

TerrainBuilder buildMine();

Terrain build();

}

3、ComplexTerrainBuilder 具体构建过程

这个具体的构建过程可以有多个实现,比如游戏可以根据不同的模式构建多个不同的地图(简单版,经典版,复杂版。。。)

package com.mashibing.Builder;

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;

}

}

4、Main 使用

package com.mashibing.Builder;

public class Main {

public static void main(String[] args) {

TerrainBuilder builder = new ComplexTerrainBuilder();

Terrain t = builder.buildFort().buildWall().buildMine().build();

}

}

变种建造者模式实例:

1、Person

package com.mashibing.Builder;

public class Person {

private int id;

private String name;

private int age;

private double weight;

private int score;

private Location loc;

private Person() {}

public static class PersonBuilder{

Person p = new Person();

public PersonBuilder basicInfo(int id,String name,int age){

p.id = id;

p.name = name;

p.age = age;

return this; }

public PersonBuilder weight(double weight){

p.weight = weight;

return this; }

public PersonBuilder score(int score){

p.score = score;

return this; }

public PersonBuilder loc(String street,String roomNo){

p.loc = new Location(street, roomNo);

return this; }

public Person build(){return p;}

}

}

class Location{

String street;

String roomNo;

public Location(String street, String roomNo) {

this.street = street;

this.roomNo = roomNo;

}

}

2、使用

package com.mashibing.Builder;

public class Main {

public static void main(String[] args) {

Person p = new Person.PersonBuilder().basicInfo(1,"zhangsan",18)

.score(20)

.weight(128.2)

.loc("a","a").build();

}

}

以上是 【Java】Builder 建造者模式 的全部内容, 来源链接: utcz.com/a/115175.html

回到顶部