码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式(建造者模式)

时间:2021-02-22 12:11:45      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:一个   src   bsp   return   工厂   图片   lex   nts   方法   

1、建造者模式

(1)概念

将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。建造者模式注重组装过程,而工厂方法模式更注重创建过程

 

2、建造者模式的实现

(1)UML

技术图片

 

(2)实现

  • 抽象建造者
public interface TerrainBuilder {
    TerrainBuilder buildWall();
    TerrainBuilder buildFort();
    TerrainBuilder buildMine();
    Terrain build();
}
  • 具体建造者
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;
    }
}
  • 被建造对象
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 builder = new ComplexTerrainBuilder();
 Terrain t = builder.buildFort().buildMine().buildWall().build();

 

3、在JDK中的运用

StringBulider的append方法

 

设计模式(建造者模式)

标签:一个   src   bsp   return   工厂   图片   lex   nts   方法   

原文地址:https://www.cnblogs.com/zhai1997/p/14423789.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!