建造模式(Builder)是对象的创建模式,建造模式可以将一个产品的内部表象与产品的生产过程分割开来,从而可以是建造过程生成具有不同内部表象的产品对象。一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,通常我们称作内部表象,不同的产品可以有不同的内部表象,也就是不同的零件。使用建造模式可以使客户端不需要知道所生成的产品有那些零件,每个产品对应的零件彼此有何不同,是怎么建造出来的,以及怎样组成产品的。建造模式的简略图如下图所示:
建造模式的角色:
抽象建造者(Builder)角色:给出一个抽象接口,用来规范产品对象各个组成成分的建造,跟商业逻辑无关,但是一般而言,有多少方法产品就有几部分组成。
具体建造者(Concrete Builder)角色:担任这个角色的是与应用程序紧密相关的一些类,它们在应用程序调用下创建产品的实例包括创建产品各个零件和产品本身。
导演者(Director)角色:担任这个角色的类调用具体建造者角色创建产品对象。导演者角色并没有产品类的具体知识,真正拥有产品类的具体知识是具体建造者。
产品(Product)角色:产品便是建造中的复杂对象,一般来说产品对象有多个部分组成,在一个体统中会有多余一个的产品类。
实例:
我们还举车的例子,现在要生产一辆客车,客车包括各个部分,如轮胎,底盘,发动机,座椅,外壳。建立以下模型:
上面的模型代码表示如下:
1、导演着:
packagecom.pattern.builder; /** * *【描述】:导演者 *【作者】:alaric *【时间】:Jul 14, 2012 *【文件】:com.pattern.builder.Director.java * */ publicclass Director { private Builder builder; public TrafficMachine construct() { builder =new CoachBuilder(); builder.buildTire();//创建轮胎 builder.buildChassis();//创建底盘 builder.buildEngine();//创建发动机 builder.buildSeat();//创建座椅 builder.buildShell();//创建外壳 return builder.retrieveResult(); } }
2、抽象建造者
packagecom.pattern.builder; /** * *【描述】:抽象建造者 *【作者】:alaric *【时间】:Jul 14, 2012 *【文件】:com.pattern.builder.Builder.java * */ publicinterface Builder { /** * *【描述】:建造轮胎 *【作者】:alaric *【时间】:Jul 14, 2012 * */ publicvoid buildTire(); /** * *【描述】:建造底盘 *【作者】:alaric *【时间】:Jul 14, 2012 * */ publicvoid buildChassis(); /** * *【描述】:建造引擎 *【作者】:alaric *【时间】:Jul 14, 2012 * */ publicvoid buildEngine(); /** * *【描述】:建造座椅 *【作者】:alaric *【时间】:Jul 14, 2012 * */ publicvoid buildSeat(); /** * *【描述】:建造外壳 *【作者】:alaric *【时间】:Jul 14, 2012 * */ publicvoid buildShell(); /** * *【描述】:返回产品 *【作者】:alaric *【时间】:Jul 14, 2012 * */ public TrafficMachine retrieveResult(); }
3、实现建造者
packagecom.pattern.builder; /** * *【描述】:客车建造者 *【作者】:alaric *【时间】:Jul 14, 2012 *【文件】:com.pattern.builder.CoachBuilder.java * */ publicclass CoachBuilder implements Builder{ private Coach coach =new Coach(); @Override publicvoid buildTire(){ // 此处根据实际业务写相关逻辑 coach.setTire(new Tire()); } @Override publicvoid buildChassis(){ // 此处根据实际业务写相关逻辑 coach.setChassis(new Chassis()); } @Override publicvoid buildEngine(){ // 此处根据实际业务写相关逻辑 coach.setEngine(new Engine()); } @Override publicvoid buildSeat(){ // 此处根据实际业务写相关逻辑 coach.setSeat(new Seat()); } @Override publicvoid buildShell(){ // 此处根据实际业务写相关逻辑 coach.setShell(new Shell()); } public TrafficMachine retrieveResult(){ // 此处根据实际业务写相关逻辑 return coach; } }
4、产品接口(可以没有)
packagecom.pattern.builder; /** * *【描述】:抽象的车 *【作者】:alaric *【时间】:Jul 14, 2012 *【文件】:com.pattern.builder.TrafficMachine.java * */ publicinterface TrafficMachine { }
5、客车类—实现产品类
packagecom.pattern.builder; /** * *【描述】:客车 *【作者】:alaric *【时间】:Jul 14, 2012 *【文件】:com.pattern.builder.Coach.java * */ publicclass Coach implements TrafficMachine { private Chassis chassis; private Tire tire; private Engine engine; private Seat seat; private Shell shell; public Chassis getChassis(){ return chassis; } publicvoid setChassis(Chassis chassis){ this.chassis= chassis; } public Tire getTire(){ return tire; } publicvoid setTire(Tire tire){ this.tire= tire; } public Engine getEngine(){ return engine; } publicvoid setEngine(Engine engine){ this.engine= engine; } public Seat getSeat(){ return seat; } publicvoid setSeat(Seat seat){ this.seat= seat; } public Shell getShell(){ return shell; } publicvoid setShell(Shell shell){ this.shell= shell; } }
6、部件类
packagecom.pattern.builder; /** * *【描述】:轮胎 ---不错具体的实现 *【作者】:alaric *【时间】:Jul 14, 2012 *【文件】:com.pattern.builder.Tire.java * */ publicclass Tire { } packagecom.pattern.builder; /** * *【描述】:底盘 *【作者】:alaric *【时间】:Jul 14, 2012 *【文件】:com.pattern.builder.Chassis.java * */ publicclass Chassis { } packagecom.pattern.builder; /** * *【描述】:发动机 *【作者】:alaric *【时间】:Jul 14, 2012 *【文件】:com.pattern.builder.Engine.java * */ publicclass Engine { } packagecom.pattern.builder; /** * *【描述】:座椅 *【作者】:alaric *【时间】:Jul 14, 2012 *【文件】:com.pattern.builder.Seat.java * */ publicclass Seat { } packagecom.pattern.builder; /** * *【描述】:外壳 *【作者】:alaric *【时间】:Jul 14, 2012 *【文件】:com.pattern.builder.Shell.java * */ publicclass Shell { }
通过上面例子我们可以更明确创建模式的各个角色职能和作用,在现实开发中可能会省略一些,要根据实际业务来决定,以上是一个产品的例子,事实上多个产品的更为常见。我们将上面的模型扩展,加入多产品,模型如下:
多产品的实现和单一产品的实现基本一样,这里就不赘述了。当产品为多产品的时候整体结构有点像抽象工厂模式,但是我们只要把握重点,抽象工厂是在客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象;而建造模式重点在于影藏和封装复杂产品的内部建造过程和结构,侧重点和用意完全不同,这点要掌握了区分就很简单了。
设计模式系列目录:
相关推荐
建造者模式是一种结构型设计模式,它允许我们分步骤创建复杂对象,而无需暴露构建过程的内部细节。这种模式在Java编程中非常常见,尤其是在处理需要多种构建方式或需要隔离对象构造过程的场景。 建造者模式的核心...
以上只是部分Java设计模式的介绍,实际的“DesignPatterns”压缩包可能包含了这些模式的源代码实现,通过阅读和学习这些代码,开发者可以更好地理解和运用设计模式,提升代码质量。同时,结合博主提供的博客链接,...
本资料“《java设计模式》课后习题模拟试题解答——刘伟.zip”主要涵盖了Java设计模式的学习与应用,特别是针对刘伟教授的相关课程的课后习题及模拟试题的解答。 设计模式分为三大类:创建型、结构型和行为型模式。...
《Java与模式——源码》这个主题涉及到的是Java编程语言中的设计模式应用,以及如何通过源代码来理解和学习这些模式。设计模式是软件工程中的一种最佳实践,它们是解决常见问题的经验总结,使得代码更易读、易维护、...
### Java设计模式经典教程知识点概览 #### 一、设计模式概述 设计模式是一种软件设计方法,它为软件开发者提供了一种标准化的方式去解决常见的软件设计问题。设计模式的使用可以提高代码的可读性和可维护性,同时...
本资源“JAVA设计模式.chm”聚焦于一种重要的设计模式——工厂模式。工厂模式是面向对象设计中的一种经典模式,它在Java程序中扮演着核心角色。 工厂模式的核心思想是提供一个创建对象的接口,但让实现这个接口的类...
目录: 前 言 第一部分 大旗不挥,谁敢冲锋——热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 ...附录:23个设计模式
总结来说,Java设计模式的学习是一条不断深化的过程,它从UML开始,到设计模式的具体分类和应用,再到软件设计原则的领悟,每一步都是提升个人技术能力的重要环节。通过不断的学习和实践,开发者能够成为一名更加...
根据提供的标题、描述以及部分内容,本文将深入探讨Java设计模式,并着重分析23种常见的设计模式,以帮助Java程序员更好地理解和应用这些模式。 ### Java设计模式概述 Java设计模式是面向对象软件设计的一种通用可...
《Java与模式》是闫宏大师的一部经典之作,它将古老的哲学智慧——道德经的智慧,巧妙地融入到现代编程语言Java的设计模式之中。这本书不仅深入浅出地讲解了23种经典的设计模式,还提供了丰富的实践案例,旨在帮助...
在编程世界中,Java设计模式是面向对象编程领域的一个重要概念,它为解决常见的软件设计问题提供了可重用的解决方案。对于新手来说,设计模式可能显得深奥难懂,但它们实际上是经验丰富的开发者用来提高代码质量、可...
总结来说,Java的设计模式——建造者模式在Android开发中扮演着重要角色,它帮助我们构造复杂对象,提供了一种模块化、易扩展的代码结构,提高了代码的可读性和可维护性。通过理解并熟练运用建造者模式,开发者可以...
在Java编程中,设计模式被广泛应用于构建大型、复杂系统,以确保代码的高效性和灵活性。以下是《Head First设计模式》中涵盖的一些主要设计模式及其要点: 1. **工厂模式**:提供一个创建对象的接口,使代码可以...
### Java设计模式(1)——理解与应用 #### 一、设计模式概述 设计模式是在软件工程领域中,为了应对特定问题或情境而形成的最佳实践集合。这些模式可以帮助开发者更高效地解决常见问题,提高代码的可重用性和可...
### JAVA设计模式总结之23种设计模式及六大原则 #### 一、设计模式之六大原则 ##### 总原则:开闭原则(Open Close Principle) 开闭原则是设计模式中最核心的原则之一,它强调的是软件实体(类、模块、函数等)...
设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板或蓝图。...通过阅读《设计模式——Java语言中的应用》这本书,你可以更深入地学习和掌握这些模式的细节及其在实际开发中的应用。
《JAVA设计模式(中文).chm》是一部专为Java开发者准备的设计模式指南,它深入浅出地阐述了软件工程中的重要概念——设计模式。设计模式是解决常见编程问题的成熟解决方案,是经验丰富的开发者们在实践中总结出的最佳...
**JAVA设计模式——核心概念与应用** 设计模式是软件开发中的宝贵经验总结,它们是针对常见问题的可重用解决方案。在Java编程中,设计模式是提升代码质量、可维护性和扩展性的关键。《JAVA设计模式.影印版》这本书...