Builder模式

来源:互联网 发布:怎样降低淘宝纠纷率 编辑:程序博客网 时间:2024/06/14 18:00

Builder模式的UML图

类图


时序图


Builder模式的角色

Director :调用具体的Builder去构建对象

Builder : 抽象接口,规范产品对象的各个组成部分的构建

ConcreteBuilder : 实现builder类抽象接口,建造过程完成后,返回产品

Product : 建造的产品对象

Builder模式的优点

  1. 调用者无需知道构造细节
  2. 可以更精细的控制构建过程
  3. 将构建过程和部件解耦
  4. 使用不同的builder,相同的构建过程,能够产生不同的对象

一个Builder模式

Director

public class Director {private Builder builder;public Director(Builder b) {builder = b;}public void construct(){builder.buildFloor();builder.buildHousetop();builder.buildWall();}}

Builder

public interface Builder {public void buildFloor();public void buildWall();public void buildHousetop();public House getResult();}

ConcreateBuilder1

public class PingFangBuilder implements Builder {private House house = new House();@Overridepublic void buildFloor() {house.setFloor("平房->地板");}@Overridepublic void buildWall() {house.setWall("平房->墙");}@Overridepublic void buildHousetop() {house.setHousetop("平房->房顶");}@Overridepublic House getResult() {return house;}}

ConcreteBuilder2

public class GongyuBuilder implements Builder {private House house = new House();@Overridepublic void buildFloor() {house.setFloor("公寓地板");}@Overridepublic void buildWall() {house.setWall("公寓墙");}@Overridepublic void buildHousetop() {house.setHousetop("公寓屋顶");}@Overridepublic House getResult() {return house;}}

Product

public class House {private String floor;private String wall;private String housetop;public String getFloor() {return floor;}public void setFloor(String floor) {this.floor = floor;}public String getWall() {return wall;}public void setWall(String wall) {this.wall = wall;}public String getHousetop() {return housetop;}public void setHousetop(String housetop) {this.housetop = housetop;}}

Client

public class MainClass {public static void main(String[] args) {Builder builder1 = new PingFangBuilder();Director director1 = new Director(builder1);director1.construct();House house1 = builder1.getResult();GongyuBuilder builder2 = new GongyuBuilder();Director director2 = new Director(builder2);director2.construct();House house2 = builder2.getResult();}}




0 0
原创粉丝点击