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

好了,接下来让我们进入正题,建造者模式呢,很多其他介绍这个文章的内容中都提到了4个角色。什么builder,director的一时让同为初次了解到建造者模式的这个概念感受到困惑不已。后来看明白才发现,这些角色和我们开始理解建造者模式不是充分必要关系。我们完全可以等了解了建造者模式后才总结出这几个角色。所以我决定一开始先不扯这些概念性的东西,而是一步一步引导读者来揭开建造者模式的面纱。

那从例子开始,建造者模式就是要造东西嘛,造点啥呢?我脑海中曾经一顿挣扎,什么,造汽车啊,大楼啊,电脑啊等等,后来发现还是简单点造个人吧。这样大家都好理解。读者也可以理解造机器人。只要你喜欢。

那我们新建一个人的类。

public class Human {private String head;private String body;private String hand;private String foot;public String getHead() {return head;}public void setHead(String head) {this.head = head;}public String getBody() {return body;}public void setBody(String body) {this.body = body;}public String getHand() {return hand;}public void setHand(String hand) {this.hand = hand;}public String getFoot() {return foot;}public void setFoot(String foot) {this.foot = foot;}
}

这个就是人的类了,我们取名为human。只要是人都是这个类出来的。

那我们想要造人的话,得有一个标准吧?  来要造人的话得有一个步骤吧?头,身体,手,脚,那都得有。

所以我们先写一个接口。一个定义了造人标准的接口。

public interface IBuildHuman {public void buildHead();public void buildBody();public void buildHand();public void buildFoot();public Human createHuman();
}

看,一个接口定义好了。有各种造部位的方法,最后给个createHuman方法给你返回一个我们想要造的人。

现在,人的类和造人的标准我们都定义好了。那我们可以先造一个人出来,先造一个高智商的人吧。

public class SmartManBuilder implements IBuildHuman {Human human;public SmartManBuilder(){human = new Human();}@Overridepublic void buildHead() {human.setHead("智商180的头脑");      }@Overridepublic void buildBody() {human.setBody("新的身体");}@Overridepublic void buildHand() {human.setHand("新的手");     }@Overridepublic void buildFoot() {human.setFoot("新的脚");}@Overridepublic Human createHuman() {return human;}}

这个高智商的造人过程自然是实现了IBuildHuman这个造人标准的接口了。然后就是set方法,最后返回造好的human。

好的,其实到这里呢,我们已经完成了建造的过程。那就这么简单的建造过程,还搞了一个建造模式吗?非也。接下来,就是介绍建造者模式的精髓,那就是director。这个director呢,就是来执行我们刚才的造人动作的。没错,精髓就是我们刚才的造人动作。我们先看代码:

public class Director {public Human createHumanByDirecotr(IBuildHuman bh){bh.buildBody();bh.buildFoot();bh.buildHand();bh.buildHead();return bh.createHuman();}
}

这个director类呢,重点在于createHumanByDirecotr的参数是我们的造人标准的接口。这样一来,只要是实现了我们的这个接口的类,就都可以作为参数,我们刚刚不是造了一个高智商的人吗?那我们如果想造一个身体运动能力出色的人,也就是运动员,这个director也可以启动这个造人过程,只要我们把这个运动员的类先写好。我们来看看director是如何发挥的:

public class BuilderTest {public static void main(String[] args){Director director = new Director();Human human = director.createHumanByDirecotr(new SmartManBuilder());System.out.println(human.getHead());System.out.println(human.getBody());System.out.println(human.getHand());System.out.println(human.getFoot());} }

输出结果为:

智商180的头脑
新的身体
新的手
新的脚

看,createHumanByDirecotr这个方法带的参数就是我们高智商人的那个类。那我们想造一个运动员,就可以像高智商人那样建好类,然后传进来就可以了!

建造者模式就是这样。那到最后,我们必须要思考一下为什么这么做?学而不思则罔,我们纵观全部代码,其实我们就会发现,在最后的BuilderTest类中,我们其实根本就不会知道具体是怎么造人的,因为这个过程让director给代劳了。然后,我们的SmartManBuilder类中才是真正的造人方法。director其实只是执行了这个过程。这样子,达到了分离模块的功能。造人的过程,启动造人的过程,和最后选择哪种人来造。都分的清清楚楚。就有了一些模块化的感觉,这样维护和扩展都是很方便的。所以设计模式的精髓还是那几个原则。感觉原则才是法则,而这么多模式就是具体的招式。今天的建造者模式就到这里。希望看到这里的你可以明白!谢谢!如果有问题,欢迎留言交流!

java建造者模式--给一个你一看就懂的建造者模式相关推荐

  1. java线程间通信:一个小Demo完全搞懂

    版权声明:本文出自汪磊的博客,转载请务必注明出处. Java线程系列文章只是自己知识的总结梳理,都是最基础的玩意,已经掌握熟练的可以绕过. 一.从一个小Demo说起 上篇我们聊到了Java多线程的同步 ...

  2. mave工程中的一个类调用另一个聚合工程的一个类_谈谈设计模式:建造者模式在jdk中的体现,它和工厂模式区别?...

    背景 建造模式(Builder模式) 假如有一个需求:盖房子,盖房子过程是一致的:打桩.砌墙.封顶.但是房子是各式各样的,最后盖出来的房子可能是高楼或别墅. 根据直接的思路,不用设计模式思想,我们也许 ...

  3. Java语言程序设计数据结构基础篇第11版6.31(金融应用:信用卡号的合法性检验)信用卡号遵循某种模式。一个信用卡号必须是13-16位的整数 (java)

    信用卡号遵循某种模式.一个信用卡号必须是13到16位的整数.它的开头必须是: 4,指Visa卡 5,指Master卡 37,指American Express卡 6,指Discover卡 1954年, ...

  4. java 账本 创建数据库_想用你所学的JAVA与数据库写一个属于自己的账本吗?一起来看看呗!看如何用java项目操作数据库...

    *利用简单的JAVA与数据库写一个属于你自己的账本* 效果图 * 目标实现 把用户输入的信息录入到数据库中,并且从数据库中取出值来,是不是很简单? 所需工具 相信大家都有的,eclipse.myecl ...

  5. java atm模拟系统_Java RPC模式开发一个银行atm模拟系统

    采用rpc模式开发一个银行atm模拟系统. 系统主要提供一个服务Card,该服务接口可以提供登录.查询.取钱.存钱等功能.服务接口的设计和实现自定义. Atm客户端功能需求: 1.ATM可以实现用户登 ...

  6. 设计模式——结构型模式之代理模式和适配器模式(类比+图解,从无到有,一文看懂几种模式的区别)

    设计模式 系列文章: 一.创建型模式--工厂模式 二.创建型模式--单例模式.原型模式 三.创建型模式--建造者模式 四.结构型模式--装饰者模式 五.结构型模式--代理模式.适配器模式 文章目录 设 ...

  7. java当前月份减一个月_在java编程中怎样用%表示当前月份的上一个月和下一个月...

    我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路. 学习Java其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想.每一种语言的程序设计思想大同小异,只是一些 ...

  8. java开发平台普元_java开发平台的两种实现模式

    从目前国内主流的java开发平台看,主要有两种实现模式:引擎模式及生成源代码模式.引擎模式比较有代表性的是华丹平台(https://www.huadaninfo.com),生成源代码模式比较有名是的普 ...

  9. 面试题:各大公司Java后端开发面试题总结 已看1 背1 有用 链接有必要看看

    ThreadLocal(线程变量副本)       --整理 Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个 ...

最新文章

  1. ActiveMQ后台使用
  2. list删除某个元素_Redis对象——列表(List)
  3. javascript --- 瀑布流的实现
  4. (王道408考研数据结构)第六章图-第四节1:最小生成树之普利姆算法(思想、代码、演示、答题规范)
  5. Linux 压缩与解压
  6. RichEdit 各个版本介绍
  7. eclipse和myeclipse的差别问题
  8. 供应链管理优化和革新八大关键因素
  9. 百度缺的不是狼性,而是鲁滨逊
  10. 计算机软件著作权收钱么,计算机软件著作权登记收费吗
  11. 商店卖西瓜 10斤c语言,算法,西瓜切十刀,最多是多少块?
  12. HTTP断点续传以及缓存问题
  13. 高分辨率 java_高分辨率图像快照,在Java
  14. 2014年音视频即时通讯市场的割据
  15. linux 使用pip安装出现错误
  16. [CEOI2011] Balloons
  17. Tacotron以及Tacotron2详解
  18. aria服务器没有响应,aria2服务器错误
  19. plSql使用技巧及优化
  20. 高数_第2章多元函数微分学 概述

热门文章

  1. 美国电影《毕业生》主题曲
  2. 联想2015云计算大数据实习生面试题
  3. XtraBackup 使用总结
  4. php @is_uploaded_file,PHP函数is_uploaded_file用法
  5. 仿应学短视频APP项目功能分析说明书
  6. OPPO k9x和红米Note11哪个好?红米Note11对比OPPO K9x区别
  7. 资本寒冬来临,美图的增长引擎如何发动?
  8. 分布式一致性算法之Paxos
  9. 7-20 打印九九口诀表 (15分)
  10. 模拟器突然发生慢动作问题