- 浏览: 32277 次
- 性别:
- 来自: 杭州
最近访客 更多访客>>
最新评论
-
bbym010:
通俗易懂,不错
Build模式的理解 -
0000ps:
今天在MSDN上看到一段内容:
Value Object. S ...
Value Object vs. Data Transfer Object (VO vs. DTO)
Builder模式
是为了将构建复杂对象的组装过程和它的创建部件与产品对象分离.注意: 是解耦组装过程和创建具体部件.
过程实现使用Director,它仅关心组装部件的过程,不关心每个具体部件的创建。
而Builder则是定义出创建部件的接口,然而具体的创建,则是有ConcreteBuilder
来实现。
由于在Director使用是Builder接口所以,这样就可以重用创建过程,因为
不同的ConcreteBuilder,虽然创建部件不同相同,但是组装过程却相同。
我们假设,每个汽车都有车轮,发动机等部件组成,如果不使用模式,按照一般的方法,
在构造函数中,创建部件车轮,发动机,并且然后进行了组装。
下面以一辆Polo为例:
这就是我们没有使用Builder的方式,这样使构造函数相当的复杂。
因为它负责创建具体的部件如(4个车轮,和一个发动机),然后需要进行组装成为产品Polo.
如果我们再增加一种车的类型HongDa,虽然它们种类不同,具体的部件不同,
但是组装的过程相同和部件的抽象(4个车轮和一个发动机)相同。
这样违背地OO的思想重用,于是我们把组装的过程,和创建部件,从产品的构造中独立出来,
其实就是简化产品的构造函数,封装成对象,来重用。
于是我们外部化一个Builder它负责创建汽车部件和组装过程,因为创建的部件不同,如Polo的车轮和HongDa的不同,但是它们的组装过程却是相同的,于是我们先定义,几个方法将由它的具体子类实现,
和一个具体的方法,它负责组装过程。明白的会看出这就是模板方法(Template Method)模式。
其实当builder模式的director角色和builder角色合并得化,它就是template method
模式。抽象方法负责创建部件,具体骨架方法负责组装过程。这样具体的builder只需实现抽象
方法。
Builder目前负责创建部件和组装过程,如果我们把这两个职责,
再进行划分处理,单独一个负责组装过程,另一个负责创建部件。
因为虽然部件不同,但是过程是相同的。于是抽象出两个类。
在Director中使用builder接口,然后按照一定规则进行组装,大家可以
看出这是针对接口进行编程的体现。我们看具体的builder
客户端的使用,首先创建具体的builder,然后使用Director
是为了将构建复杂对象的组装过程和它的创建部件与产品对象分离.注意: 是解耦组装过程和创建具体部件.
过程实现使用Director,它仅关心组装部件的过程,不关心每个具体部件的创建。
而Builder则是定义出创建部件的接口,然而具体的创建,则是有ConcreteBuilder
来实现。
由于在Director使用是Builder接口所以,这样就可以重用创建过程,因为
不同的ConcreteBuilder,虽然创建部件不同相同,但是组装过程却相同。
我们假设,每个汽车都有车轮,发动机等部件组成,如果不使用模式,按照一般的方法,
在构造函数中,创建部件车轮,发动机,并且然后进行了组装。
下面以一辆Polo为例:
public class Polo{ //在构造函数中,创建部件,然后进行组装 public Polo(){ //创建部件 车轮 obj1=new 车轮(); //进行组装部件 this.车轮s.add(obj1); 车轮 obj2=new 车轮(); this.车轮s.add(obj2); //这里省略其他两个车轮 ................. 汽车发动机 objNessan=new 汽车发动机(); this.汽车发动机=objNessan; } //汽车的组成部件 public vector 车轮s=new Vector; public 汽车发动机 汽车发动机 =null; //这里省略了其他部件和功能函数 ................. }
这就是我们没有使用Builder的方式,这样使构造函数相当的复杂。
因为它负责创建具体的部件如(4个车轮,和一个发动机),然后需要进行组装成为产品Polo.
如果我们再增加一种车的类型HongDa,虽然它们种类不同,具体的部件不同,
但是组装的过程相同和部件的抽象(4个车轮和一个发动机)相同。
这样违背地OO的思想重用,于是我们把组装的过程,和创建部件,从产品的构造中独立出来,
其实就是简化产品的构造函数,封装成对象,来重用。
于是我们外部化一个Builder它负责创建汽车部件和组装过程,因为创建的部件不同,如Polo的车轮和HongDa的不同,但是它们的组装过程却是相同的,于是我们先定义,几个方法将由它的具体子类实现,
和一个具体的方法,它负责组装过程。明白的会看出这就是模板方法(Template Method)模式。
//它抽象了创建部件,定义一个骨架方法 public class Builder{ public void builder车轮(int n){}; public void builder发动机(){}; public void director构造过程(){ this.builder车轮(4); this.builder车轮(); } } public class PoloBuilder extends Builder{ private Polo polo=new Polo(); public void builder车轮(int n){ for(int i=0;i<n;i++){ 车轮 obj1=new 车轮(); polo.车轮s.add(obj1); } } public void builder发动机(){ 汽车发动机 objNessan=new 汽车发动机(); polo.汽车发动机=objNessan; } public Polo getProduct(){ return polo; } }
其实当builder模式的director角色和builder角色合并得化,它就是template method
模式。抽象方法负责创建部件,具体骨架方法负责组装过程。这样具体的builder只需实现抽象
方法。
Builder目前负责创建部件和组装过程,如果我们把这两个职责,
再进行划分处理,单独一个负责组装过程,另一个负责创建部件。
因为虽然部件不同,但是过程是相同的。于是抽象出两个类。
//该类负责创建部件,具体的由子类实现 public class Builder{ public void builder车轮(int n){}; public void builder发动机(){}; } //该类实现组装过程 public class Director{ private Builder builder=null; public class Director(Builder builder){ this.builder=builder; } public void 组装过程(){ builder.builder车轮(4); builder.builder车轮(); } }
在Director中使用builder接口,然后按照一定规则进行组装,大家可以
看出这是针对接口进行编程的体现。我们看具体的builder
public class PoloBuilder extends Builder{ private Polo polo=new Polo(); public void builder车轮(int n){ for(int i=0;i<n;i++){ 车轮 obj1=new 车轮(); polo.车轮s.add(obj1); } } public void builder发动机(){ 汽车发动机 objNessan=new 汽车发动机(); polo.汽车发动机=objNessan; } public Polo getProduct(){ return polo; } }
客户端的使用,首先创建具体的builder,然后使用Director
PoloBuilder polobuild=new PoloBuilder(); Director d=new Director(polobuild); d.组装过程(); Product p=polobuild.getProduct();
发表评论
-
Facade vs Proxy
2010-04-02 08:36 1221Question: i feel there is not m ... -
UML中关联(association)和依赖(dependency)的区别
2010-03-30 08:56 3261这个问题不仅我们这些小喽罗会迷惑,很多大拿们也没有统一的认识, ... -
Aggregation v.s. Composition
2010-03-30 08:13 1383Aggregation Aggregation is a k ... -
UML中几种类间关系:继承、实现、依赖、关联、聚合、组合
2009-12-06 23:13 1236继承,泛化(Generalization) 指的是一个类( ... -
设计模式简图
2009-11-26 22:00 888... -
Proxy, Builder and Decoration 异同点
2009-11-09 13:52 0晚上写分打发打发法 -
面向对象设计原则
2009-11-07 09:43 728正如牛顿三大定律 ... -
Flyweight Pattern 享元模式
2009-09-29 16:07 905GOF:运用共享技术有效地支持大量细粒度的对象。 解释一 ... -
Using the Prototype pattern to clone objects
2009-09-27 15:48 920Prototype pattern is one of the ... -
Is a Java Immutable Class Always final?
2009-09-27 15:10 1532In response to my recent blog p ... -
Defensive copying
2009-09-27 14:46 999A mutable object is simply an o ... -
Copy constructors
2009-09-27 14:29 817Copy constructors : provi ... -
Immutable objects
2009-09-27 14:13 873Immutable objects are simply ob ... -
Java Immutable Class
2009-09-27 14:09 2006Java Immutable Class[ From ] ... -
Value Object vs. Data Transfer Object (VO vs. DTO)
2009-09-18 10:31 1651The pattern which is known toda ...
相关推荐
在“buildType-master”这个项目中,学生可能会通过实现这些设计模式来完成课程设计,从而深入理解和掌握它们的实际应用。这将有助于他们提高软件设计能力,编写出更优雅、可维护的代码。同时,这也是软件工程中非常...
Builder模式是一种设计模式,它属于创建型模式,主要用于复杂对象的构建。在C++中,Builder模式可以帮助我们分步骤地创建一个复杂...通过深入理解并熟练运用Builder模式,可以在实际开发中提高代码的可读性和可扩展性。
通过阅读和分析这些文件,我们可以深入理解Builder模式的工作原理,以及如何在实际项目中应用这种模式来提高代码的可读性和可维护性。同时,对于源码的分析可以帮助我们更好地掌握设计模式的精髓,提升编程技能。
在Android开发过程中,`BuildConfig.DEBUG` 是一个非常重要的常量,它用于判断当前应用是否处于调试模式。这个常量的值在构建过程中由Gradle自动生成,通常在开发阶段,`BuildConfig.DEBUG` 应该返回 `true`,以便...
3. **使用兼容模式**:部分较新的MSBuild版本可能可以兼容旧的项目格式,通过设置兼容标志或者使用特定命令行参数来使新版本MSBuild能够处理旧版项目文件。 4. **使用第三方工具或脚本**:有些第三方工具如GYP...
首先,我们要理解Android Build Tools的作用。它们主要负责处理Android应用程序的构建过程,包括编译源代码、生成APK、资源编译和优化、以及对应用进行签名等步骤。在Android Studio中,Build Tools与Gradle插件协同...
首先,我们要理解什么是Android SDK Build Tools。SDK(Software Development Kit)是软件开发工具包,包含了开发者创建Android应用所需的各种工具和库。Build Tools则是SDK中的一个子集,主要负责处理构建过程中的...
通过对创建者模式的理解和实践,开发者可以更好地管理对象的创建,尤其是在需要控制复杂对象构建流程的情况下,创建者模式能够提供一种优雅的解决方案。通过阅读压缩包中的资料,你可以深入理解这一模式,并将其运用...
通过理解`build.gradle`文件的内容和结构,我们可以定制Gradle构建流程,确保项目依赖的正确导入,并利用`spotbugs`来提升代码质量。同时,`buildtools`目录可能提供了一些辅助工具,有助于整个开发和构建过程。对于...
构建结束后,分析结果将以Web页面形式展示给用户,便于快速定位和理解问题所在。此过程无需修改编程习惯或编译环境,只需通过重写`cc`和`cxx`环境变量,Scan-build即可无缝替换原有的编译器,采用伪编译器(默认基于...
**Android Studio SDK Build-tools 20.0.0详解** Android Studio SDK Build-tools是Android开发者不可或...理解其功能、如何使用以及定期更新的重要性,将有助于开发者更高效地完成开发工作,并确保应用的质量和性能。
综上所述,理解并正确使用Build Tools版本对于Android应用开发至关重要。在开发过程中,保持Build Tools版本与项目需求一致,可以避免很多构建错误和兼容性问题。同时,了解不同Android版本的特性也有助于开发出更...
在这个游戏中,玩家需要通过移动拼图块来恢复一个被打乱的图像,通常这种游戏采用的是经典的九宫格模式。 【C++build 2009】是Visual C++ 2009 Express Edition的简称,是微软提供的一款免费的C++集成开发环境,...
在提供的压缩包文件"设计模式精解(GoF 23种设计解析附C++实现源码)(Build 0510).pdf"中,你可以找到每种模式的详细解释以及C++代码实现,这对于理解和应用这些模式非常有帮助。 通过学习和实践GoF设计模式,...
总结,Java Ant build是Java项目自动化构建的重要工具,通过理解`build.xml`中的各个元素,我们可以更好地控制和管理项目的构建过程,确保代码的编译、测试和打包等工作高效、准确地完成。学习和掌握Ant构建,对于...
在进行AngularJS学习的过程中,不断构建和实践,将所学的知识点与真实的开发场景结合起来,会更容易理解和掌握AngularJS的架构思路和编程模式。《Build Your Own Angularjs》通过一步步的指导,帮助开发者构建自己的...
- **API级别**: Android 4.4.2对应的API级别是19,这个版本引入了多项新功能和改进,如全屏模式、打印框架、WebRTC支持等。 - **兼容性**: 使用Build-tools 19.1.0构建的应用可以兼容运行Android 4.4.2及以上版本...
**KMDF-Build 规范概述** 微软的Windows驱动程序模型(WDM)在过去的许多年里一直是Windows驱动的基础。然而,WDM驱动程序因为实现的复杂性而著名,开发者在进入驱动开发领域时通常面临陡峭的学习曲线。掌握WDM所需...
向导可以指导完成驱动程序的初始化设置,如选择驱动类型(如内核模式驱动或用户模式驱动)、设置目标平台、选择硬件接口等。此外,它还可能提供代码生成功能,自动生成一些基础框架代码,减少手动编写工作。 2. **...
同时,编辑器的配置文件是JSON格式,易于理解和自定义,让每个人都能根据自己的喜好调整编辑环境。 **8. 分割编辑** Sublime Text允许用户将屏幕分割成多个区域,每个区域可以独立编辑不同的文件,方便对比和协作。...