您的位置:首页 > 其它

设计模式之建造者模式

2015-06-01 10:45 260 查看
建造者模式又叫生成器模式,定义如下:

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

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



代码如下:

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();
}

}


建造者模式大致的就是这样,可能这个例子不是很恰当,只是为了说明一下建造模式的场景,建造者模式和工厂模式很像,但是两者的关注点不同,工厂模式关注的是整体,我们可以想象成现实中的工厂,我们生产一辆汽车,工程模式生产出的汽车都是一样,它不会关注如何组装各个零件,但是建造者模式关注的零部件的组装,由于组装的不同顺序或者型号不同而产生的结果不同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: