设计模式之建造者模式

建造者模式又叫生成器模式,定义如下:

将一个复杂对象的构造与它的表示分离,是的同样的构建过程 可以创建不同的表示


建造者模式的通用类图如下:



代码如下:


public abstract class Bulider {

    // 设置产品的不同部分,即组装产品
    public abstract void setPart();

    // 返回产品
    public abstract Product bulidPart();
}

public class ConcreteBuilder extends Bulider {

    private Product product=new Product();
    
    /**
     * 
     */
    @Override
    public void setPart() {

        product.setPart1("xxxx");
        
        product.setPart2("xxxx");
    }

    /**
     * @return
     */
    @Override
    public Product bulidPart() {
        return this.product;
    }

}

public class Product {

    private String part1;

    private String part2;
    

    public String getPart1() {
        return part1;
    }

    public void setPart1(String part1) {
        this.part1 = part1;
    }

    public String getPart2() {
        return part2;
    }

    public void setPart2(String part2) {
        this.part2 = part2;
    }

}

public class Director {

    private Bulider bulider = new ConcreteBuilder();

    public Product getProduct() {

        bulider.setPart();

        return bulider.bulidPart();
    }

}

下面用一个画笔的例子来说明一下建造者模式,类图如下:



public class PaintBrush {

    private String color = "黑色";

    // 形状:入矩形、原型、直线等等
    private String shape;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getShape() {
        return shape;
    }

    public void setShape(String shape) {
        this.shape = shape;
    }

}

public abstract class BrushBulider {


    // 组装画笔
    public abstract void bulidPart();
    
    //创建画笔
    public abstract PaintBrush createPaintBrush();
}

public class LineBrush extends BrushBulider {

    private PaintBrush paintBrush = new PaintBrush();

    /**
     * 
     */
    @Override
    public void bulidPart() {

        paintBrush.setColor("红色");
        paintBrush.setShape("直线");
    }

    /**
     * @return
     * 
     */
    @Override
    public PaintBrush createPaintBrush() {
        // TODO Auto-generated method stub
        return paintBrush;
    }

}


public class CircleBrush extends BrushBulider {

    private PaintBrush paintBrush = new PaintBrush();

    /**
     * 
     */
    @Override
    public void bulidPart() {

        paintBrush.setColor("黄色");
        paintBrush.setShape("椭圆");
    }

    /**
     * @return
     */
    @Override
    public PaintBrush createPaintBrush() {
        // TODO Auto-generated method stub
        return paintBrush;
    }

}

public class Director {

    public static void main(String[] args) {

        // 创建一个直线画笔
        BrushBulider bulider = new LineBrush();

        // 组装画笔
        bulider.bulidPart();

        // 生成画笔
        PaintBrush paintBrush = bulider.createPaintBrush();
    }

}

建造者模式大致的就是这样,可能这个例子不是很恰当,只是为了说明一下建造模式的场景,建造者模式和工厂模式很像,但是两者的关注点不同,工厂模式关注的是整体,我们可以想象成现实中的工厂,我们生产一辆汽车,工程模式生产出的汽车都是一样,它不会关注如何组装各个零件,但是建造者模式关注的零部件的组装,由于组装的不同顺序或者型号不同而产生的结果不同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值