【设计模式】-建造者模式-Builder

简介

将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。建造者模式属于创建型模式。以下两种情况适合采用建造者模式:

  • 1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
  • 2)当构造过程必须允许被构造的对象有不同表示时。

角色

在建造者模式中,有以下几个角色:

  • Builder:接口,规定建造一个对象需要建造哪几部分。
  • ConcreteBuilder:实现Builder的接口,实现各部分具体怎么建造。
  • Director:构造一个使用Builder接口的对象,决定各部分的建造顺序。
  • Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。

使用示例

package org.iti.designmodel;

public class BuilderMode {

    // 测试代码
    public static void main(String[] args) {
        DrawRect drawer = new Drawer();
        Director director = new Director();
        Rect rect = director.draw(drawer);
        System.out.println(rect);
    }

}

// 抽象建造者
interface DrawRect {
    void drawLeftLine();

    void drawTopLine();

    void drawRightLine();

    void drawBottomLine();

    Rect buildRect();
}

// 具体建造者
class Drawer implements DrawRect {
    Rect rect;

    public Drawer(Rect rect) {
        super();
        this.rect = rect;
    }

    public Drawer() {
        this.rect = new Rect();
    }

    @Override
    public void drawLeftLine() {
        rect.setLeftLine("Red Left Line");
    }

    @Override
    public void drawTopLine() {
        rect.setTopLine("Green Top Line");
    }

    @Override
    public void drawRightLine() {
        rect.setRightLine("Blue Right Line");
    }

    @Override
    public void drawBottomLine() {
        rect.setBottomLine("Yellow Bottom Line");
    }

    @Override
    public Rect buildRect() {
        return rect;
    }

}

// 导演,规定各部分的建造顺序
class Director {

    public Rect draw(DrawRect drawer) {
        drawer.drawBottomLine();
        drawer.drawLeftLine();
        drawer.drawRightLine();
        drawer.drawTopLine();
        return drawer.buildRect();
    }
}

// 产品
class Rect {
    String leftLine;
    String topLine;
    String rightLine;
    String bottomLine;

    public String getLeftLine() {
        return leftLine;
    }

    public void setLeftLine(String leftLine) {
        this.leftLine = leftLine;
    }

    public String getTopLine() {
        return topLine;
    }

    public void setTopLine(String topLine) {
        this.topLine = topLine;
    }

    public String getRightLine() {
        return rightLine;
    }

    public void setRightLine(String rightLine) {
        this.rightLine = rightLine;
    }

    public String getBottomLine() {
        return bottomLine;
    }

    public void setBottomLine(String bottomLine) {
        this.bottomLine = bottomLine;
    }

    @Override
    public String toString() {
        return "Rect [leftLine=" + leftLine + ", topLine=" + topLine
                + ", rightLine=" + rightLine + ", bottomLine=" + bottomLine
                + "]";
    }

}

运行结果如下:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值