Design Pattern_Java:Builder Pattern

Design Pattern:Builder Pattern

建造者模式 Builder Pattern

Separate the construction of a complex object from its representation so that the same construction process can create different representations.

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

抽象建造者角色(Builder):该角色用于规范产品的各个组成部分,并进行抽象,一般独立于应用程序的逻辑。

public abstract class Builder {

//设置产品的不同部分,以获得不同的产品
public abstract void setPart1();
public abstract void setPart2();
public abstract void setPart3();

//建造产品
public abstract Product builderProduct();
}

具体建造者角色(Concrete Builder):该角色实现抽象建造者中定义的所有方法,并且返回一个组建好的产品实例。

public class ConcreteBuilder extends Builder{
private Product product=new Product();

//设置产品零件
@Override
public void setPart1() {
    //为product安装部件1
}

@Override
public void setPart2() {
    //为product安装部件2
}

@Override
public void setPart3() {
    //为product安装部件2
}

//建造一个产品
@Override
public Product builderProduct() {
    return product;
}

}

产品角色(Product):该角色是建造中的复杂对象,一个系统中会有多于一个的产品类,这些产品类并一定有共同的接口,完全可以是不想关联的。

public class Product{
    //产品类的业务处理方法
}

导演者角色(Director):该角色负责安排已有模块的顺序,然后告诉Builder开始建造。

public class Director{
    private Builder builder=new ConcreteBuilder();

    //构造产品,负责调用各个零件建造方法
    public Product build(){
        builder.setPart1();
        builder.setPart2();
        builder.setPart3();

        return builder.builderProduct();
    }
}

建造者模式的实例

Computer.java

package com.DesignPattern.Creational.Builder;

public abstract class Computer {

    private String type;
    private String cpu;
    private String ram;
    private String hardDisk;
    private String monitor;
    private String os;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public String getRam() {
        return ram;
    }

    public void setRam(String ram) {
        this.ram = ram;
    }

    public String getHardDisk() {
        return hardDisk;
    }

    public void setHardDisk(String hardDisk) {
        this.hardDisk = hardDisk;
    }

    public String getMonitor() {
        return monitor;
    }

    public void setMonitor(String monitor) {
        this.monitor = monitor;
    }

    public String getOs() {
        return os;
    }

    public void setOs(String os) {
        this.os = os;
    }

}

T410.java

package com.DesignPattern.Creational.Builder;

public class T410 extends Computer {

    private String graphicCard;

    public T410() {
        this.setType("ThinkPad T410i");
    }

    public String getGraphicCard() {
        return graphicCard;
    }

    public void setGraphicCard(String graphicCard) {
        this.graphicCard = graphicCard;
    }

    @Override
    public String toString() {
        return "T410 [graphicCard=" + graphicCard + ", getType()=" + getType()
                + ", getCpu()=" + getCpu() + ", getRam()=" + getRam()
                + ", getHardDisk()=" + getHardDisk() + ", getMonitor()="
                + getMonitor() + ", getOs()=" + getOs() + "]";
    }

}

X201.java

package com.DesignPattern.Creational.Builder;

public class X201 extends Computer {

    public X201() {
        this.setType("ThinkPad X201i");
    }

    @Override
    public String toString() {
        return "X201 [getType()=" + getType() + ", getCpu()=" + getCpu()
                + ", getRam()=" + getRam() + ", getHardDisk()=" + getHardDisk()
                + ", getMonitor()=" + getMonitor() + ", getOs()=" + getOs()
                + "]";
    }

}

ComputerBuilder.java

package com.DesignPattern.Creational.Builder;

public interface ComputerBuilder {

    void buildCpu();
    void buildRam();
    void buildHardDisk();
    void buildGraphicCard();
    void buildMonitor();
    void buildOS();

    Computer getResult();
}

T410Builder.java

package com.DesignPattern.Creational.Builder;

public class T410Builder implements ComputerBuilder {

    private T410 computer = new T410();

    @Override
    public void buildCpu() {
        computer.setCpu("i5-450");
    }

    @Override
    public void buildRam() {
        computer.setRam("4GB 1333MHz");
    }

    @Override
    public void buildHardDisk() {
        computer.setHardDisk("500G 7200转");
    }

    @Override
    public void buildGraphicCard() {
        computer.setGraphicCard("Nvidia NVS 3100M");
    }

    @Override
    public void buildMonitor() {
        computer.setMonitor("14英寸 1280*800");
    }

    @Override
    public void buildOS() {
        computer.setOs("Windows 7旗舰版");
    }

    @Override
    public Computer getResult() {
        return computer;
    }

}

X201Builder.java

package com.DesignPattern.Creational.Builder;

public class X201Builder implements ComputerBuilder {

    private X201 computer = new X201();

    @Override
    public void buildCpu() {
        computer.setCpu("i3-350");
    }

    @Override
    public void buildRam() {
        computer.setRam("2GB 1333MHz");
    }

    @Override
    public void buildHardDisk() {
        computer.setHardDisk("250G 5400转");
    }

    @Override
    public void buildGraphicCard() {
        // 无显卡
    }

    @Override
    public void buildMonitor() {
        computer.setMonitor("12英寸 1280*800");
    }

    @Override
    public void buildOS() {
        computer.setOs("Windows 7 Home版");
    }

    @Override
    public Computer getResult() {
        return computer;
    }
}

ComputerDirector.java

package com.DesignPattern.Creational.Builder;

public class ComputerDirector {

    ComputerBuilder builder;
    public T410 constructT410(){
        builder=new T410Builder();
        builder.buildCpu();
        builder.buildRam();
        builder.buildHardDisk();
        builder.buildGraphicCard();
        builder.buildMonitor();
        builder.buildOS();
        return (T410)builder.getResult();
    }
    public X201 constructX210(){
        builder=new X201Builder();
        builder.buildCpu();
        builder.buildRam();
        builder.buildHardDisk();
        builder.buildMonitor();
        builder.buildOS();
        return (X201)builder.getResult();
    }
}

ComputerTest.java

package com.DesignPattern.Creational.Builder;

public class ComputerTest {

    public static void main(String[] args){
        ComputerDirector director=new ComputerDirector();
        Computer t410=director.constructT410();
        System.out.println(t410);
        System.out.println("-------------------------------");
        Computer x201=director.constructX210();
        System.out.println(x201);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值