一,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对象,消耗内存。

对Java建造者模式(Builder)的一点理解相关推荐

  1. 设计模式之—建造者模式(Builder)-Java实现

    Builder模式,将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部 表象的产品对象.建造模式使得产品内部表象可以独立的变化,客户不必知道产品内部组成的细节.建造模式可以 ...

  2. 建造者模式(Builder)——从组装电脑开始

    建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电 ...

  3. 说说设计模式~建造者模式(Builder)

    建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC ...

  4. Android设计模式之建造者模式builder

    今天小编来说一下Android中的一种设计模式--建造者模式Builder 绪论: 那么对于Android初级来说,Builder设计模式可能在我们开发中用过的很少,但是我们可能见过,我们经常用的Al ...

  5. Java建造者模式(Builder pattern)

    模式简介 建造者模式又称生成器模式,所属创建型设计模式,它提供了一种最佳的创建对象方式,将多个简单的对象一步一步构建成一个复杂的对象.对于用户而言,无需知道创建过程和内部组成细节,只需直接使用创建好的 ...

  6. 今儿直白的用盖房子为例,给你讲讲Java建造者模式

    本文分享自华为云社区<[Java设计模式]用盖房子案例讲解建造者模式(生成器模式)>,作者: 我是一棵卷心菜 . 现在我们需要建房子,过程为打桩.砌墙.封顶.房子有各种各样的,比如普通房, ...

  7. Python 设计模式之建造者模式 Builder Pattern

    #引入建造者模式 肯德基的菜单上有 薯条, 鸡腿,鸡翅,鸡米花,可乐,橙汁,火腿汉堡,至尊虾汉堡,牛肉汉堡 , 鸡肉卷等这些单品,也有很多套餐. 比如 套餐1:鸡翅,至尊虾汉堡,可乐,薯条 套餐2:鸡 ...

  8. 设计模式(创建型)之建造者模式(Builder Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  9. java建造者模式--给一个你一看就懂的建造者模式

    在开始写这个建造者模式的文章前,我也确实看了挺多次其他介绍这个模式的文章.感觉看了很多次才有一点对建造者模式明白透彻的感觉.细心想来,可能是接口的理解不好,平时工作比较少用到过建造者模式,所以理解的比 ...

  10. Activiti源码之建造者模式 Builder

    建造者模式介绍 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 一个 Builder 类 ...

最新文章

  1. 谷歌开发者大会杀出技术黑马,知乎AI终于不再隐藏实力了
  2. websocket session超时_SSE(ServerSent Events):替代websocket完成服务器推送
  3. python如何读取配置文件获取url以及hhead_python爬虫小工具:(模块:copyhreaders,直接复制头文件,无须挨个添加双引号)...
  4. 这个顶会论文复现比赛,单篇最高现金奖3W!
  5. linux程序莫名异常怎么查
  6. [html] 怎样在<pre>标签内不转义<和>符号(原样输出html标签)?
  7. SpringCloud Ribbon负载均衡介绍及使用
  8. linux测试接口配置,linux can 总线socket接口测试使用
  9. python网页内容获取记录pkg
  10. .NET框架源码解读之SSCLI编译过程简介
  11. 那智机器人调试步骤总结
  12. 【5G NR】手机身份证号IMEI与IMEISV
  13. IJCAI 2022杰出论文公布,大陆作者中稿298篇拿下两项第一
  14. Sony微单相机alpha6000 wifi远程控制(2)
  15. 设计模式 — 抽象工厂模式
  16. PXE+pxelinux+binlsrv+tftpd32远程安装windows 2003及心得
  17. 值传递与引用传递详解
  18. IBM serverx440 光通路诊断面板
  19. 三门问题的计算机模拟,三门问题
  20. 使用成功路径实现数据库状态回传

热门文章

  1. php地铁,php 抓取自如友家首页的区域和地铁数据
  2. elementui表格自定义序号
  3. 雷达距离分辨力的推导
  4. 重返母校怀抱,老同学聚会南京大学
  5. 题解:线性规划与网络流24题 T2 太空飞行计划问题
  6. 集成隔离电源设计 ,满足EMI目标
  7. 文本与文本处理(一)
  8. 从零开始学建网站,枫树seo网给新手站长的九大建站忠告
  9. 不只有CPU,细数移动GPU的那些事
  10. 完美正方形(DFS)