设计模式之构建(Builder)模式 建造房子实例分析

 更新时间:2012年12月07日 12:07:35   作者:  
构建模式主要用来针对复杂产品生产,分离部件构建细节,以达到良好的伸缩性,考虑到设计模式来源于建筑学,因此举一个建造房子的例子,需要的朋友可以参考下
构建模式主要用来针对复杂产品生产,分离部件构建细节,以达到良好的伸缩性。
考虑到设计模式来源于建筑学,因此举一个建造房子的例子。现在一个客户要建造一栋房子House,
复制代码 代码如下:

public class House{
//客户需求的房子
}

那么他首先需要一个设计师—Designer,但是设计师只能做设计,指示如何去建造房子,可是他并不会亲自去做,那么就还需要一个施工队伍BuildTeam,那么首先,Designer要设计出来如何去建造这栋房子,首先要施工队打地基,然后施工队要架骨架、接着上水泥等等(具体如何不得而知,需要请教专业人士),那么从这里我们可以知道设计师对施工队是有要求的,那就是施工队必须要会打地基、会架骨架、会上水泥等,因此得出如下招聘施工队的要求:
复制代码 代码如下:

public interface BuildTeam{
public void 打地基();
public void 架骨架();
public void 上水泥();
。。。。。。
}

从上可以看出,要想做这个工程的施工队伍,必须首先符号上面的条件,会做上面所有的事情。根据设计师的设计,又得知设计师会向施工队下达一个命令,然后施工队按照设计师的要求开始施工:
复制代码 代码如下:

public class Designer{
public void construct(BuildTeam team){
team.打地基();
team.架骨架();
team.上水泥();
}
}

由于从头到尾都是设计师在下指令设计,而施工队进行实际施工,所以客户最终会找施工队验收房子,因此施工队必须要交付房子给客户,因此施工队需要加上一个交付房子的条款,不然房子做成了,但是施工队却不交付给我,那不是吃亏了,因此:
复制代码 代码如下:

public interface BuildTeam{
public void 打地基();
public void 架骨架();
public void 上水泥();
。。。。。。
public House deliverHouse(); //增加一个交付房子的方法。
}

好了,房子设计好了,如何做也设计好了,如今就差给谁来做了,现在有一个施工队:
复制代码 代码如下:

public class BuildTeamA extends BuildTeam{
public void 打地基(){}
public void 架骨架(){}
public void 上水泥(){}
。。。。。。
public House deliverHouse(){}
}

从施工队的情况来看, 这个施工队完全符合设计师对施工队的要求,既接口BuildTeam,好,那么最终决定由他们来做,从头到尾全部流程如下:
Designer designer = new Designer(); //找到一个设计师
BuildTeam teamA = new BuildTeamA(); //找到一个施工队伍BuildTeamA
designer.construct(teamA); //设计师下命令,让施工队伍按照他的设计开始建造
House house = teamA.deliverHouse(); //施工队完成后交付房子
第一栋房子终于建成了,此时同一个客户觉得这个设计师的设计不错,于是决定还要使用他的设计并由他指示施工队再造一栋同样的房子,可是施工队BuildTeamA突然狮子大开口,想要更多的钱,客户为了节省成本,只好再次招聘一个新的施工队进行施工,刚好有个施工队伍BuildTeamB符合要求,于是流程如下:
复制代码 代码如下:

BuildTeam teamB = new BuildTeamB();
designer.construct(teamB); //由于设计师没变,且造同样的房子,所以designer不需要重新找,只需要把他指示的施工队换成BuildTeamB即可
House house = teamB.deliverHouse(); //施工队完成后交付房子

好了,第二栋房子也完成了,但是整个流程上并没有太大的变动,由于使用了构建模式,整个流程分工非常明确,客户不需要参与任何设计以及建造,设计师只负责设计以及下命令,而施工队也仅仅只负责具体的实现细节,使得建造明细独立出来,随时更换不同的施工队均可。

相关文章

  • Java游戏服务器系列之Netty相关知识总结

    Java游戏服务器系列之Netty相关知识总结

    今天带大家来学习Java游戏服务器的相关知识,文中对Netty作了非常详细的介绍,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • Spring boot 添加jsp支持配置详解

    Spring boot 添加jsp支持配置详解

    本篇文章主要介绍了Spring boot 添加jsp支持配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • Java Hibernate中的查询策略和抓取策略

    Java Hibernate中的查询策略和抓取策略

    Hibernate是一种Java对象关系映射框架,提供了多种查询和抓取策略,用于优化数据库访问性能。查询策略包括延迟加载、立即加载、查询缓存等,抓取策略包括join抓取、子查询抓取、批量抓取等。这些策略可以根据实际应用场景进行选择和配置,提高数据访问的效率和稳定性
    2023-04-04
  • Java多线程 Producer and Consumer设计模式

    Java多线程 Producer and Consumer设计模式

    这篇文章主要介绍了Java多线程 Producer and Consumer设计模式,producer是生产者的意思:指生产数据的线程,consumer是消费者的意思,指的是使用数据的线程,下文围绕Producer及Consumer展开话题,需要的朋友可以参考一下
    2021-10-10
  • Java thrift服务器和客户端创建实例代码

    Java thrift服务器和客户端创建实例代码

    Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。接下来通过本文给大家介绍Java thrift服务器和客户端创建实例代码,需要的朋友参考下吧
    2017-04-04
  • SpringBoot2 整合Ehcache组件,轻量级缓存管理的原理解析

    SpringBoot2 整合Ehcache组件,轻量级缓存管理的原理解析

    这篇文章主要介绍了SpringBoot2 整合Ehcache组件,轻量级缓存管理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 详解使用JavaCV/OpenCV抓取并存储摄像头图像

    详解使用JavaCV/OpenCV抓取并存储摄像头图像

    本篇文章主要介绍了使用JavaCV/OpenCV抓取并存储摄像头图像,实例分析了使用JavaCV/OpenCV抓取并存储摄像头图像的技巧,非常具有实用价值,需要的朋友可以参考下
    2017-04-04
  • Spring整合mybatis、springMVC总结

    Spring整合mybatis、springMVC总结

    这篇文章主要为大家详细介绍了Java整合Mybatis,SpringMVC,文中有详细的代码示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-05-05
  • java基于TCP协议实现聊天程序

    java基于TCP协议实现聊天程序

    这篇文章主要为大家详细介绍了java基于TCP协议实现聊天程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 浅析Java中局部变量与成员变量同名解决技巧

    浅析Java中局部变量与成员变量同名解决技巧

    在刚开始学习Java的时候,就了解了Java基础中的变量,虽然知道这个以后会经常用到,但没想到了基本语法这里,竟然又冒出来了成员变量和局部变量。变来变去太容易让人搞晕了,今天我们就挑拣出来梳理一下!
    2016-07-07

最新评论