深入浅出设计模式:建造者模式

本文深入讲解了建造者模式,一种重要的设计模式。通过实例代码详细解释了建造者模式的角色和应用,包括Builder、ConcreteBuilder、Director和Product的概念,以及如何在实际编程中使用这种模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式是程序员必须掌握的技能,熟练应用各种设计模式,不仅可以提升我们的编码能力,也可以使得我们的编码更美观。在这里我们来讲解一下建造者模式。

百度百科定义如下

建造者模式(Builder Pattern)是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

实用范围

1 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 

2 当构造过程必须允许被构造的对象有不同表示时。

角色

 

在这样的设计模式中,有以下几个角色:

1 builder:为创建一个产品对象的各个部件指定抽象接口。

2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。

3 Director:构造一个使用Builder接口的对象。

4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

概念还是比较清晰,我们这里直接看代码

package com.designpatterns.builder;

//建造一个家
public interface HomeBuilder {
    void buildMarry();
    void buildChildren();
    void buildHouse();
    Home build();
}
package com.designpatterns.builder;

public class SmallHomeBuilder implements HomeBuilder {
    Home home = new Home();

    @Override
    public void buildMarry() {
        home.setMarry("结婚......");
    }

    @Override
    public void buildChildren() { home.setChildren("生子......"); }

    @Override
    public void buildHouse() {
        home.setHouse("买房......");
    }

    @Override
    public Home build() {
        return home;
    }
}
package com.designpatterns.builder;

public class HomeDirector {
    public Home constructHome(HomeBuilder hb) {
        hb.buildMarry();
        hb.buildChildren();
        hb.buildHouse();
        return hb.build();
    }
}
package com.designpatterns.builder;

public class Home {
    private String marry;
    private String children;
    private String house;

    public String getMarry() {
        return marry;
    }

    public void setMarry(String marry) {
        this.marry = marry;
    }

    public String getChildren() {
        return children;
    }

    public void setChildren(String children) {
        this.children = children;
    }

    public String getHouse() {
        return house;
    }

    public void setHouse(String house) {
        this.house = house;
    }
}
package com.designpatterns.builder;

/**
 * 设计模式之建造者模式
 *
 * @author 小辉GE/小辉哥
 * <p>
 * 2019年11月10日 下午19:40:00
 */
public class TestMain {
    public static void main(String[] args) {
        HomeDirector director = new HomeDirector();
        Home home = director.constructHome(new SmallHomeBuilder());
        System.out.println(home.getMarry());
        System.out.println(home.getChildren());
        System.out.println(home.getHouse());
    }
}

从上面代码可以看出

1 HomeBuilder:为创建一个产品对象的各个部件指定抽象接口。

2 SmallHomeBuilder:实现HomeBuilder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并 提供一个检索产品的接口。

3 HomeDirector:构造一个使用HomeBuilder接口的对象。

4 Home:表示被构造的复杂对象。SmallHomeBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

这里是基本的建造者模式的定义,很多时候在实际应用中会有多种演化。可能会省略抽象建造者角色或者省略指导者角色。这就需要大家自己工作中多多感悟。

以上代码仅供参考,如有不当之处,欢迎指出!!!

更多干货,欢迎大家关注我。期待和大家一起更好的交流、探讨技术!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值