首页 > 技术文章 > 建造者模式

xxyxt 2019-09-06 13:42 原文

建造者模式再生活中很常见,以盖房子为例,如果想盖一栋写字楼,业主可以公开招标,建筑单位负责施工,设计单位负责出图。单单从施工过程来看,肯定是由项目经理来负责项目的进行,盖房子需要很多材料,钢筋、水泥、砖等,这些不可能由项目经理自己去生产这些材料,而是联系建材商负责提供,然后由一线工人负责实际的生产,项目经历更多的是承担一个指挥者的角色,实际的工作是由工人来完成的。

再建造者模式中,主要由四个关键部分组成:

①产品:实际要生产的东西,比如房子,组成部分大同小异,但是每一个构件的材料可以不同;

②抽象建造者:包括建造每一部分的抽象方法和返回产品的方法;

③具体建造者:实现抽象方法;

④指挥者

 

 

建造者模式代码示例:

package newcoder.Builder;
/*
建造者模式由四部分组成:
1、产品
2、抽象建造者,包括建造每一部分的抽象方法和返回产品的方法
3、具体建造者,继承抽象建造者,实现抽象方法
4、指挥者
 */
class productHouse{
    private String sofa;
    private String TV;
    private String desk;

    public String getSofa() {
        return sofa;
    }

    public void setSofa(String sofa) {
        this.sofa = sofa;
    }

    public String getTV() {
        return TV;
    }

    public void setTV(String TV) {
        this.TV = TV;
    }

    public String getDesk() {
        return desk;
    }

    public void setDesk(String desk) {
        this.desk = desk;
    }

    @Override
    public String toString() {
        return "房子里面有:"+this.desk+"\n"+this.sofa+"\n"+this.TV;
    }
}
abstract class builder{
    protected productHouse producthouse = new productHouse();
    public abstract void addSofa(String band);
    public abstract void addDesk(String band);
    public abstract void addTV(String band);
    public productHouse getResult(){
        return producthouse;
    }
}
class concreteBuilder extends builder{
    public void addSofa(String band){
        producthouse.setSofa(band);
    }
    public void addDesk(String band){
        producthouse.setDesk(band);
    }
    public void addTV(String band){
        producthouse.setTV(band);
    }
}
class Director{
    private builder bd;
    public Director(builder bd){
        this.bd = bd;
    }
    public productHouse command(){
        bd.addDesk("红木桌子");
        bd.addSofa("皮沙发");
        bd.addTV("长虹电视");
        return bd.getResult();
    }
}
public class BuilderTest {
    public static void main(String args[]){
        productHouse myhouse;
        builder a = new concreteBuilder();
        Director d = new Director(a);
        myhouse = d.command();
        System.out.println(myhouse);
    }

}

建造者(Builder)模式创建的是复杂对象,其产品的各个部分经常面临着剧烈的变化,但将它们组合在一起的算法却相对稳定,所以它通常在以下场合使用。

  • 创建的对象较复杂,由多个部件构成,各部件面临着复杂的变化,但构件间的建造顺序是稳定的。
  • 创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式,即产品的构建过程和最终的表示是独立的。

推荐阅读