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

所属分类: 软件编程 / java 阅读数: 143
收藏 0 赞 0 分享
构建模式主要用来针对复杂产品生产,分离部件构建细节,以达到良好的伸缩性。
考虑到设计模式来源于建筑学,因此举一个建造房子的例子。现在一个客户要建造一栋房子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实现一个简单的文件上传案例示例代码

这篇文章主要介绍了Java实现一个简单的文件上传案例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解在spring中使用JdbcTemplate操作数据库的几种方式

这篇文章主要介绍了详解在spring中使用JdbcTemplate操作数据库的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

java中的switch case语句使用详解

这篇文章主要介绍了java中的switch case语句使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

深入理解Java 线程池

这篇文章主要介绍了Java 线程池的相关资料,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

详解mybatis #{}和${}的区别、传参、基本语法

这篇文章主要介绍了mybatis #{}和${}的区别、传参、基本语法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

这篇文章主要介绍了MyBatis 中 ${}和 #{}的正确使用方法,本文给大家提到了MyBatis 中 ${}和 #{}的区别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Mybatis中的 ${} 和 #{}区别与用法

这篇文章主要介绍了Mybatis中的 ${} 和 #{}区别与用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Maven安装过程图文详解

这篇文章主要介绍了Maven安装过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

SpringBoot登录拦截配置详解(实测可用)

这篇文章主要介绍了SpringBoot登录拦截配置详解(实测可用),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

JAVA 内存溢出案例汇总

这篇文章主要介绍了JAVA 内存溢出案例的汇总,文中讲解非常细致,帮助各位工作学习时避免内存溢出,感兴趣的朋友可以了解下
收藏 0 赞 0 分享
查看更多