设计模式05:建造者模式

抽象一点说建造者模式的目的:
将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。——-《设计模式》GOF

举个例子,一台电脑的主板上有很多的硬件,可能根据需要要经常的更换。比如现在要将Intel的CPU换成AMD的,那么我们不需要从新的构建一块主板,而是只换CPU就可以了。这就是建造者模式需要达到的目的。整个建筑过程和具体的表示分离,建造过程指的是每个电脑主板都有cpu,表示指的是具体使用的CPU型号。很好理解,表示和建造过程实际上没有必然的联系,如果分离将增加很多的灵活性。

一般建造者模式包含以下几个类,Builder,product,Director,ConcreteBuilder。我们想象一个这样的场景。要建造一块主板,这个建造过程是可以确定的,不能确定的是各个零部件的生产厂家。Product就是主板,主板中包含了cpu,memory,io零部件。建造者只管建立这些零部件,Director负责将零部件组合到一起形成产品,并通过一个方法提供产品。

我们来看一下UML:

这里写图片描述

builder作为一个基本的建造者接口
public interface Builder {
    public void buildCPU();
    public void buildMemory();
    public void buildIO();
    public Productor getProductor();
}

SonyBuilder实现建造者接口

public class SonyBuilder implements Builder{
    private Productor productor= new SonyProductor();
    public void buildCPU() {
        productor.setCPU("sonyCPU");
    }
    public void buildMemory() {
        productor.setMemory("sonyMemory");
    }
    public void buildIO() {
        productor.setIo("sonyIO");
    }
    public Productor getProductor(){
        return productor;
    }

}

SonyProductor继承productor

public class SonyProductor extends Productor{
    public String getIo() {
        return io;
    }
    public void setIo(String io) {
        this.io = io;
    }
    public String getCPU(){
        return this.cpu;
    }
    public void setCPU(String name){
        this.cpu=name;
    }
    public String getMemory() {
        return memory;
    }
    public void setMemory(String memory) {
        this.memory = memory;
    }
}
HuaweiBuilder实现建造者接口

public class HuaweiBuilder implements Builder {

private Productor productor = new HuaweiProductor();

@Override
public void buildCPU() {
    productor.setCPU("huwei cpu");
}

@Override
public void buildMemory() {
    productor.setMemory("huwei memory");
}

@Override
public void buildIO() {
    productor.setIo("huwei io");
}

@Override
public Productor getProductor() {
    return productor;
}

}


HuaweiProductor 继承productor类

public class HuaweiProductor extends Productor {
public String getIo() {
return io;
}
public void setIo(String io) {
this.io = io;
}
public String getCPU(){
return this.cpu;
}
public void setCPU(String name){
this.cpu=name;
}
public String getMemory() {
return memory;
}
public void setMemory(String memory) {
this.memory = memory;
}
}


Director中构建一个Productor(可以是索尼,也可以是华为)

public class Director {
public Productor Construction(Builder builder){
//建造顺序是由director决定的
builder.buildCPU();
builder.buildIO();
builder.buildMemory();
return builder.getProductor();
}
public static void main(String[] args){
Director dirctor = new Director();
Productor productor=dirctor.Construction(new SonyBuilder());
//显示建造的结果
System.out.println(productor.getCPU());
System.out.println(productor.getMemory());
System.out.println(productor.getIo());

    productor = dirctor.Construction(new HuaweiBuilder());
    //显示建造的结果
    System.out.println(productor.getCPU());
    System.out.println(productor.getMemory());
    System.out.println(productor.getIo());
}

}

运行结果:
sonyCPU
sonyMemory
sonyIO
huwei cpu
huwei memory
huwei io

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值