Java设计模式之建造者模式

概要

建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的创建过程可以创建不同的表示。并返回一个复杂对象的创建。

复杂对象:是指包含多个成员变量的对象,例如汽车的很多配件、电脑的各种硬件。

建造者模式包含4个部分:

抽象建造者:它为创建一个产品对象的各个部件指定抽象接口,在该接口中,一般申明两种方法,一种是buildPartX(),另一种是getResult(),用于返回复杂对象。

具体建造者:实现了buildPartX()接口,用于创建成员变量的对象。

产品类:被创建的对象,包含多个组成部分,例如一个完整的汽车类。

指挥类:负责安排复杂对象的的建造次序,与抽象建造者之间存在关联关系,完成复杂对象的建造。

示例如下:

public class Builder {
    public static void main(String[] args) {

        ComputerBuilder computerBuilder = new ConcreteBuilder();
        Director director = new Director(computerBuilder);
        Computer computer = director.construct();
        System.out.println(computer.getPartScreen());
    }

}
/*******产品类*********/
class Computer
{
    String partMouse;
    String partKeyWord;
    String partScreen;

    public String getPartMouse() {
        return partMouse;
    }

    public void setPartMouse(String partMouse) {
        this.partMouse = partMouse;
    }

    public String getPartKeyWord() {
        return partKeyWord;
    }

    public void setPartKeyWord(String partKeyWord) {
        this.partKeyWord = partKeyWord;
    }

    public String getPartScreen() {
        return partScreen;
    }

    public void setPartScreen(String partScreen) {
        this.partScreen = partScreen;
    }
}
/******抽象建造者*******/
abstract class ComputerBuilder
{
    protected Computer computer = new Computer();

    abstract void buildpartMouse();
    abstract void buildpartKeyWord();
    abstract void buildPartScreen();

    public Computer getComputer()
    {
        return computer;
    }

}
/**********具体建造者用来创建成员变量的对象或赋值**********/
class ConcreteBuilder extends ComputerBuilder
{

    void buildpartMouse() {
        computer.setPartMouse("leishen");
    }

    void buildpartKeyWord() {
        computer.setPartKeyWord("daeryou");
    }

    void buildPartScreen() {
        computer.setPartScreen("sanxing");
    }
}

/**********指挥者类,与具体建造者类交互,返回产品复杂对象********/
class Director
{
    private ComputerBuilder computerBuilder;

    public Director(ComputerBuilder computerBuilder)
    {
        this.computerBuilder = computerBuilder;
    }

    public Computer construct()
    {
        computerBuilder.buildpartMouse();
        computerBuilder.buildpartKeyWord();
        computerBuilder.buildPartScreen();

        return computerBuilder.getComputer();
    }
}

说明:

1、上述代码块用来阐述一个电脑的装备过程,核心代码在具体建造者和指挥类内,这样设计的好处是当我们需要再进行创建一个不同配置的电脑时,我们只需要再增加一个具体建造者类,重新创建它的成员变量,而无需要更改现有代码,符合面向对象设计的开闭原则。

2、如果抽象工厂是一个汽车配件生产厂,用于生成不同类型的汽车配件,那么建造者模式则是汽车配件组装厂,用于组装并返回一个完整的汽车。这句话值得深入思考!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值