`
luozhonghua2014
  • 浏览: 62585 次
文章分类
社区版块
存档分类
最新评论

设计模式-建造者模式给用户自由

 
阅读更多
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 engineBoom();

//那模型应该会跑吧,别管是人推的,还是电力驱动,总之要会跑
final public void run() {

//循环一边,谁在前,就先执行谁
for(int i=0;i<this.sequence.size();i++){
String actionName = this.sequence.get(i);

if(actionName.equalsIgnoreCase("start")){ //如果是start关键字,
this.start(); //开启汽车
}else if(actionName.equalsIgnoreCase("stop")){ //如果是stop关键字
this.stop(); //停止汽车
}else if(actionName.equalsIgnoreCase("alarm")){ //如果是alarm关键字
this.alarm(); //喇叭开始叫了
}else if(actionName.equalsIgnoreCase("engine boom")){ //如果是engine boom关键字
this.engineBoom(); //引擎开始轰鸣
}

}

}

//把传递过来的值传递到类内
final public void setSequence(ArrayList<String> sequence){
this.sequence = sequence;
}

}


public class BenzModel extends CarModel {




@Override
protected void alarm() {
System.out.println("奔驰车的喇叭声音是这个样子的...");
}




@Override
protected void engineBoom() {
System.out.println("奔驰车的引擎室这个声音的...");
}




@Override
protected void start() {
System.out.println("奔驰车跑起来是这个样子的...");
}




@Override
protected void stop() {
System.out.println("奔驰车应该这样停车...");
}


}


public class BMWModel extends CarModel {




@Override
protected void alarm() {
System.out.println("宝马车的喇叭声音是这个样子的...");
}




@Override
protected void engineBoom() {
System.out.println("宝马车的引擎室这个声音的...");
}




@Override
protected void start() {
System.out.println("宝马车跑起来是这个样子的...");
}




@Override
protected void stop() {
System.out.println("宝马车应该这样停车...");
}


}


public class Client {


public static void main(String[] args) {
/*
* 客户告诉牛叉公司,我要这样一个模型,然后牛叉公司就告诉我老大
* 说要这样一个模型,这样一个顺序,然后我就来制造
*/
BenzModel benz = new BenzModel();
//存放run的顺序
ArrayList<String> sequence = new ArrayList<String>();
sequence.add("engine boom"); //客户要求,run的时候时候先发动引擎
sequence.add("start"); //启动起来
sequence.add("stop"); //开了一段就停下来
//我们把这个顺序赋予奔驰车
benz.setSequence(sequence);
benz.run();
}
}

分享到:
评论

相关推荐

    设计模式精解-GoF 23种设计模式解析附C++实现源码

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。GoF(Gang of Four)所提出的23种设计模式,被认为是面向对象...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    - **缺点**:产品内部组成变化复杂时,会增加很多具体建造者类。 - **1.5 Prototype模式**:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 - **应用场景**:对象初始化消耗资源过多时。 - ...

    设计模式精解-23种设计模式解析

    - **定义**: 建造者模式是一种创建型设计模式,允许你逐步构建一个复杂的对象。 - **目的**: 在不暴露内部实现的情况下组装对象的不同部分。 - **优点**: - 分离构造过程和表示。 - 构建相同类型的对象,但采用...

    c++设计模式精解-GoF 23种设计模式解析附C++实现源码

    - **定义**:建造者模式是一种创建型设计模式,它允许你分步骤地构建复杂对象。它把构造代码和表示代码分离。 - **应用场景**:当对象的创建算法应该独立于部件的构成部分及其装配方式时;或者当构建过程必须允许被...

    JAVA 24种设计模式介绍与6大设计原则.pdf

    创建型模式关注对象创建机制,为对象实例化提供指导,包括单例模式、抽象工厂模式、建造者模式、工厂方法模式、原型模式和生成器模式等。结构型模式关注类或对象的组合,通过使用继承来组合接口或实现,例如适配器...

    设计模式精解(GoF 23 种设计模式解析)

    - **缺点**:如果产品的内部变化复杂,那么可能需要定义很多具体建造者类。 **1.5 Prototype模式** - **定义**:用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。 - **应用场景**:当创建新对象...

    设计模式精心总结

    4. 建造者模式(Builder):建造者模式用于创建复杂对象,它允许用户只通过指定复杂对象的类型和内容就可以创建它们,而避免了直接实例化类。 5. 原型模式(Prototype):原型模式用于创建重复的对象,同时又能保证...

    设计模式JAVA(学习java模式的一本好书)

    - **建造者模式**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **优点**:可以创建复杂的对象。 - **应用场景**:当创建复杂对象的算法应该独立于该对象的组成部分及其装配...

    23中设计模式

    ### 23种设计模式详解 #### 一、引言 设计模式是在软件工程领域内广泛应用的一种编程思想,它提供了一系列解决常见问题的最佳实践。23种设计模式由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides四位...

    设计模式学习必看--建筑的永恒之道

    ### 设计模式学习必看——《建筑的永恒之道》核心知识点解析 #### 一、引言 《建筑的永恒之道》是一本具有深远影响力的著作,它不仅探讨了建筑设计的本质,还将这种设计理念延伸到了软件工程领域,启发了许多设计...

    23种设计模式(C++)

    - **实现**:定义Director类和Builder接口,使用具体建造者来组装部件。 5. **Prototype模式** - **定义**:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 - **用途**:当创建新对象的...

    CC++与设计模式讲义.pdf

    3. 建造者模式(Builder Pattern),用于将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 4. 原型模式(Prototype Pattern),通过指定一个原型对象来创建一个新的对象。 5. 单例模式...

    GoF+23种设计模式解析.pdf

    4. **Builder模式**(建造者模式): - **定义**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 - **优点**:提高了灵活性,易于控制细节的构建过程。 - **应用场景**:构建复杂...

    C#23种设计模式_示例源代码及PDF

    观察者模式: 让多个观察者对象同时监听某一个 观察者模式 观察者模式定义了一种一队多的依赖关系, 主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更 新自己。 20、STATE —...

Global site tag (gtag.js) - Google Analytics