Eddyer
发下工资正心凉,一紧张,码全忘。似曾相识,何用却不详。设计模式两茫茫,看代码,泪千行。步出小窝见同事,都一样,很受伤。如此工资,无颜见嫩娘。只待晚上交钱日,接绳套,系房梁。

概述

建造模式是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部
是如何建造成成品的,调用者无需关心。

建造模式的步骤


1,首先是一个建造工具(builder)接口

package com.eddy.test.builder;

/**
 * Created by eddy on 2015/10/16.
 */
public interface Builder {

    //创建部件A  比如创建汽车车轮
    void buildPartA();
    //创建部件B 比如创建汽车方向盘
     void buildPartB();
    //创建部件C 比如创建汽车发动机
    void buildPartC();

    Product getResult(); //返回这个产品
}
package com.eddy.test.builder;

/**
 * Created by eddy on 2015/10/16.
 */
public class Product {

    private String buildPartABC;

    public Product(String buildPartABC) {
        this.buildPartABC = buildPartABC;
    }

    public String getBuildPartABC() {
        return buildPartABC;
    }
}

 

2,然后就是建造者Director接口,建造者利用建造工具(builder)进行创建产品(construct方法)

package com.eddy.test.builder;

/**
 * Created by eddy on 2015/10/16.
 */
public class Director {

    private Builder builder;

    public Director( Builder builder ) {
    this.builder = builder;
    }
    // 将部件partA partB partC最后组成复杂对象
    //这里是将车轮 方向盘和发动机组装成汽车的过程
    public void construct() {
     builder.buildPartA();
     builder.buildPartB();
     builder.buildPartC();
     }
}

 

3,其实现类

package com.eddy.test.builder;

/**
 * Created by eddy on 2015/10/16.
 */
public class ConcreteBuilder implements Builder {
    @Override
    public void buildPartA() {
        System.out.println("buildPartA");
    }

    @Override
    public void buildPartB() {
        System.out.println("buildPartB");
    }

    @Override
    public void buildPartC() {
        System.out.println("buildPartC");
    }

    @Override
    public Product getResult() {
        return new Product("buildPartABC");
    }

    public static void main(String[] args){
        //创建一个建造工具
        ConcreteBuilder concreteBuilder = new ConcreteBuilder();
        //创建(建造者)并把建造工具拿给建造者
        Director director = new Director(concreteBuilder);

        //建造者利用工具进行建造
        director.construct();
        //取得产品
        Product result = concreteBuilder.getResult();
        System.out.println(result.getBuildPartABC());
    }
}

 输出结果:

buildPartA
buildPartB
buildPartC
buildPartABC

 
posted on 2015-10-16 11:14  Eddyer  阅读(102)  评论(0)    收藏  举报