对Java建造者模式(Builder)的一点理解

本文介绍了Builder模式的概念、使用场景及其实现方式。通过一个构建电脑的例子,详细解释了Builder模式如何帮助控制复杂对象的构建过程,并保持良好的封装性和扩展性。

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

一,Builder模式介绍

    Builder模式是一步一步创建一个复杂对象的创建型模式,它允许使用者在不知道内部建造细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,是的构建过程和不见得表示隔离开来。

    因为一个复杂的对象有很多大量组成部分,如电脑,有主机,显示器,操作系统,还有各种小零件等,如何将这些不见组建成一台电脑,这个装配过程很漫长,也很复杂,为了在构建过程中对外部隐藏实现细节,就可以使用Builder模式将部件和组装过程分离,使得构建过程和部件都可以自由扩展,两者之间的耦合也降到最低。


二,Builder模式的定义

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


三,Builder模式的使用场景

    (1)相同的方法,不同的执行顺序,产生不同的事件结果。

    (2)对各部件或零件,都可以配到一个对象中,但是产生的运行结果又不相同时。

    (3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的结果,这个时候使用创建者模式非常合适。

    (4)当初始化一个对象特别复杂,如参数多,且很多参数都有默认值时。


四,Builder模式的UML类图


五,Builder模式简单实例

(1)电脑的抽象类

    public abstract class Computer {
protected String board;
protected String display;
protected String os;
//构造方法
protected Computer(){

}
//设置主板
protected void setBoard(String board){
this.board = board;
}
//设置显示器
protected void setDisplay(String display){
this.display = display;
}
//设置操作系统
protected abstract void setOs();

public String toString() {
return "computer[board="+board+",display="+display+",os="+os+"]";
}

    }

(2)具体的苹果电脑类,macBook

    public class MacBook extends Computer {
    protected MacBook() {


    }


    protected void setOs() {
os = "Mac OS X 10.10";
    }


    }


    (3)抽象Builder类

    public abstract class Builder {
    // 设置主机
    public abstract void builderBoard(String board);


    // 设置显示器
    public abstract void builderDisplay(String display);


    // 设置操作系统
    public abstract void buildOS();


    // 创建Computer
    public abstract Computer create();

    }


    (4)具体的Builder类 MacBookBuilder

     public class MacBookBuilder extends Builder {
     private Computer computer = new MacBook();


      public void builderBoard(String board) {
// TODO Auto-generated method stub
computer.setBoard(board);
}


public void builderDisplay(String display) {
// TODO Auto-generated method stub
computer.setDisplay(display);
}


public Computer create() {
// TODO Auto-generated method stub
return computer;
}


public void buildOS() {
computer.setOs();


}


}


    (5)Director类,负责构造电脑Computer

    public class Director {
    Builder builder = null;
    public Director(Builder builder){
    this.builder = builder;
    }

    public void construct(String board,String display){
    builder.builderBoard(board);
    builder.builderDisplay(display);
    builder.buildOS();
    }

    }


(6)测试Test类

    public class Test {
    public static void main(String args[]){
    //构造器
    Builder builder = new MacBookBuilder();
    Director pcDirector = new Director(builder);
    //封装构建过程
    pcDirector.construct("intel主板", "三星显示器");
    //输出信息
    System.out.println(builder.create().toString());
    }

    }

(7)测试结果



    六:总结

    (1),良好的封装性,不必知道内部组成的细节。

    (2),建造者独立,容易扩展。

    (3),产生多余的builder对象以及director对象,消耗内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值