- 浏览: 137845 次
文章分类
- 全部博客 (149)
- Java (41)
- 设计模式 (23)
- php (2)
- C++ (2)
- Linux (6)
- C (1)
- JavaEE (27)
- javascript (2)
- uplodify (1)
- Mybatis (2)
- Maven (4)
- Lucene (3)
- commons (1)
- Spring (7)
- SQL (3)
- mahout (1)
- MySQL (2)
- extjs4.2.1 (2)
- ubuntu (1)
- hadoop (1)
- hibernate (1)
- Spring JPA (2)
- JPA 2.0 (1)
- express (1)
- redis (2)
- angularjs (1)
- git (1)
- Python (1)
- logging (2)
最新评论
-
xlaohe1:
controller返回的是一个POJO对象,然后用@Resp ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
能帮到你,我也很高兴。
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
jobzjc:
第一段有帮到我。如果是非对象,Object方式传递的时候,第一 ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
dingran 写道为什么,我怎么就没找到System > ...
Ubuntu 12.04 设置 IBus 开机启动 -
dingran:
为什么,我怎么就没找到System >> Pref ...
Ubuntu 12.04 设置 IBus 开机启动
ArrayList 或者 HashMap 如果定义为类的成员变量,那么在方法中调用一定要做一个clear()动作,以防止
数据混乱。
Separate the construction of a complex object from its representation so that the same constrction
process can create different representations.
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
public abstract class CarModel { private ArrayList<String> sequence = new ArrayList<String>(); protected abstract void start(); protected abstract void stop(); protected abstract void alarm(); protected abstract void enginBoom(); final public void run() { for (int i=0; i<this.sequence.size(); i++) { String actionName = this.sequence.get(i); if (actionName.equals("start")) { this.start(); } else if (actionName.equals("stop")) { this.stop(); } else if (actionName.equals("alarm")) { this.alarm(); } else if (actionName.equals("engin boom")) { this.enginBoom(); } } } final public void setSequence(ArrayList<String> sequence) { this.sequence = sequence; } } public class BenzModel extends CarModel { @Override protected void start() { System.out.println("benz start"); } @Override protected void stop() { System.out.println("benz stop"); } @Override protected void alarm() { System.out.println("benz alarm"); } @Override protected void enginBoom() { System.out.println("benz enginBoom"); } } public class BMWModel extends CarModel { @Override protected void start() { System.out.println("BMW start."); } @Override protected void stop() { System.out.println("BMW stop."); } @Override protected void alarm() { System.out.println("BMW alarm."); } @Override protected void enginBoom() { System.out.println("BMW enginBoom."); } } public abstract class CarBuilder { public abstract void setSequence(ArrayList<String> sequence); public abstract CarModel getCarModel(); } public class BMWBuilder extends CarBuilder { private BMWModel bmw = new BMWModel(); @Override public void setSequence(ArrayList<String> sequence) { this.bmw.setSequence(sequence); } @Override public CarModel getCarModel() { return bmw; } } public class BenzBuilder extends CarBuilder { private BenzModel bezn = new BenzModel(); @Override public void setSequence(ArrayList<String> sequence) { this.bezn.setSequence(sequence); } @Override public CarModel getCarModel() { return bezn; } }
public class Director { private ArrayList<String> sequence = new ArrayList<>(); private BenzBuilder benzBuilder = new BenzBuilder(); private BMWBuilder bmwBuilder = new BMWBuilder(); public BenzModel getABenzModel() { this.sequence.clear(); this.sequence.add("start"); this.sequence.add("stop"); this.benzBuilder.setSequence(this.sequence); return (BenzModel) this.benzBuilder.getCarModel(); } public BenzModel getBBenzModel() { this.sequence.clear(); this.sequence.add("engineboom"); this.sequence.add("start"); this.sequence.add("stop"); this.benzBuilder.setSequence(this.sequence); return (BenzModel) this.benzBuilder.getCarModel(); } public BMWModel getABMWModel() { this.sequence.clear(); this.sequence.add("start"); this.sequence.add("stop"); this.benzBuilder.setSequence(this.sequence); return (BMWModel) this.bmwBuilder.getCarModel(); } public BMWModel getBBMWModel() { this.sequence.clear(); this.sequence.add("engineboom"); this.sequence.add("start"); this.sequence.add("stop"); this.benzBuilder.setSequence(this.sequence); return (BMWModel) this.bmwBuilder.getCarModel(); } }
public class Client { public static void main(String[] args) { Director director = new Director(); for (int i=0; i<100; i++) { director.getABenzModel().run(); } for (int i=0; i<100; i++) { director.getABMWModel().run(); } } }
建造者模式的优点
(1)封装性 使用建造者模式可以是客户端不必知道产品内部组成的细节。
(2)建造者独立、易扩展。
(3)便于控制细节风险。
建造者模式的使用场景
(1)相同的方法,不同的执行顺序,产生不同的时间结果时,可以采用建造者模式
(2)多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时。
(3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能。
(3)在对象的创建过程中会使用一系列的其他对象,这些对象在产品对象的创建过程中不易得到,也可以采用
建造者模式封装该对象的创建过程。该种场景只能是一个补偿方法,因为一个对象不容易获取,而在设计
阶段竟然没有发觉,而要通过创建者模式柔化创建过程,本身已经违反了设计的最初目标。
建造者模式关注的是零件类型和装配工艺(顺序),这是它与工厂模式最大不同的地方,虽然同为创建类模式,
但是注重点不同。
发表评论
-
设计模式-享元模式(Flyweight)
2014-06-20 13:11 550使用共享对象可有效地支持大量的细粒度的对象。要求细粒度的对象 ... -
设计模式-桥接模式
2014-06-19 17:12 328将抽象和实现解耦,使得两者可以独立地变化。 桥接模式使用了 ... -
设计模式-状态模式
2014-06-16 10:37 410状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像 ... -
设计模式-代理和动态代理模式
2014-06-13 14:57 4531.简单代理模式 interface Interface ... -
java 迭代器
2014-06-11 18:04 632public class ReversibleArrayL ... -
设计模式-内部类工厂模式
2014-06-10 23:33 533public interface Service { ... -
设计模式-迭代器模式
2014-06-10 14:37 457迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又 ... -
设计模式-模板方法
2014-06-05 13:00 359public abstract class Caffein ... -
设计模式-适配器模式
2014-06-03 22:14 429适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让 ... -
设计模式-命令模式
2014-06-02 23:24 373public interface Command { ... -
设计模式-工厂方法
2014-06-01 18:04 488public abstract class PizzaSt ... -
设计模式-观察者模式
2014-06-01 11:03 4751. 利用Java 内置的类和接口实现观察者模式 publ ... -
设计模式-策略模式
2013-12-16 12:50 481Define a family of algorithms ... -
设计模式-装饰模式
2013-12-16 12:49 457Attach additional responibili ... -
设计模式-责任链模式
2013-12-11 18:00 542Avoid coupling the sender of ... -
设计模式-命令模式
2013-12-08 15:11 439命令模式是一个高内聚的模式。 Encapsulate ... -
设计模式-中介者模式
2013-12-08 12:29 400在多个对象依赖的情况下,通过加入终结者角色,取消了多个对象 ... -
设计模式-模板方法模式
2013-11-20 10:45 447Define the skeleton of an algor ... -
设计模式-抽象工厂模式
2013-11-18 15:49 427Provide an interface for creati ... -
设计模式-工厂方法模式
2013-11-18 08:59 620Define an interface for creatin ...
相关推荐
Java设计模式-建造者模式详解 Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。...
建造模式(Builder Pattern)是一种创建型设计模式,它将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式常用于当构造过程需要步骤化,并且每个步骤可能有多种实现时,比如在软件工程...
建造者模式 单例模式 结构型模式 队列模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 行为模式(类行为模式) 解释器模式 模板方法模式 行为模式(对象行为模式) 策略模式 观察者模式 状态模式 导入...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...
- **缺点**:产品内部组成变化复杂时,会增加很多具体建造者类。 - **1.5 Prototype模式**:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 - **应用场景**:对象初始化消耗资源过多时。 - ...
- **建造者模式**:将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - **单例模式**:保证一个类仅有一个实例,并提供一个全局访问点,常用于配置中心、日志对象等场景。 - **原型模式*...
3. **建造者模式**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。Java中的Builder模式用于创建复杂的对象结构。 4. **原型模式**:通过复制已有对象来创建新对象,减少了创建新对象...
4. **建造者模式**:将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。适用于构建复杂的、有多个部件的对象。 5. **原型模式**:通过复制已有对象来创建新对象,避免了创建新实例的开销。适用...
4. **建造者模式**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。它适用于当创建对象的过程很复杂,需要进行多个步骤时。 5. **原型模式**:通过复制已有对象来创建新对象,而不是...
在标签中提到了“源码”和“工具”,这暗示了我们将关注的是与实际代码相关的实现细节,以及可能的辅助工具,如IDE插件或代码生成器,这些工具可以帮助开发者更好地理解和应用设计模式。 在压缩包文件“template”...
生成器模式,也被称为构建器模式,是一种软件设计模式,主要用在对象的创建过程中,它将复杂的构建过程分解为一系列简单的步骤,使得构建过程可配置,并且可以独立于对象的表示进行。在C#中,生成器模式的实现通常...
4. Builder模式,建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 5. Prototype模式,原型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 ...
生成器模式(Builder Pattern)是一种设计模式,它允许我们分步骤构建复杂对象,而无需暴露其构造过程。这种模式在创建对象时提供了更大的灵活性,特别是当构造过程需要多个步骤或者对象有不同的构造方式时。Builder...
设计模式是软件工程中的一种重要概念,它是在特定情境下,为解决常见问题而形成的一套最佳实践。这些模式经过时间的验证,被广泛应用于面向对象编程中,以提高代码的可读性、可维护性和复用性。本PDF文档详细介绍了...
- 建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - 原型模式(Prototype):用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 结构型...
建造者(生成器)模式是一种行为设计模式,它允许我们分步骤构建复杂对象,而无需暴露构造过程。这种模式在创建具有多种配置选项的对象时特别有用,因为它将对象的构造与表示分离,使得构建和表示的过程可以独立进行...
4. **建造者模式**: - **简介**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **应用场景**:当对象的创建步骤较为复杂,或者需要创建多个类似但又略有差异的对象时。 - **...
根据所提供的文件信息,内容涵盖了设计模式的多个方面,主要分为六大原则、创建型模式、行为型模式和结构型模式四大块。下面,我将根据这些信息,详细阐述这些知识点。 **一、六大设计原则** 1. **单一职责原则...
此外,设计模式还有许多其他类型,如建造者模式、适配器模式、装饰器模式等。建造者模式允许分步骤创建复杂对象,避免暴露复杂的构造过程。适配器模式则允许不同接口的类协同工作,通过适配器类转换接口。装饰器模式...