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

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();

}
}

时间: 2024-10-31 10:34:25

设计模式-建造者模式给用户自由的相关文章

php设计模式 建造者模式 与Adapter(适配器模式)

php教程设计模式 建造者模式 与Adapter(适配器模式) 适配器模式 * * 将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作 建造者模式 * * 将一个复杂对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示 <?php /** * 适配器模式 * * 将一个类的接口转换成客户希望的另外一个接口,使用原本不兼容的而不能在一起工作的那些类可以在一起工作 */ // 这个是原有的类型 class OldCache { public

[Head First设计模式]山西面馆中的设计模式——建造者模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感觉到累.一个感觉:很好玩!挺开心的...... 为什么会出现建造者模式? 在软件系统中,有时面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成. 这个复杂的对象的各个部分经常面临剧烈变化,但是将它们组合在一起的算法却相对稳定. 比如:建一所房子,建房子的过程基本不变

PHP设计模式——建造者模式

声明:本系列博客参考资料<大话设计模式>,作者程杰.        建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式.             例如:汽车,他的发动机引擎有好多品牌,轮胎也有各种材质,内饰更是千奇百怪:鸟,他的头.翅膀以及脚有各种颜色和形状,在创建这种复杂对象的时候,我们建议使用建造者模式.        类图:                建造者模式一般认为有四个角色:      1.

3、Python与设计模式--建造者模式

一.快餐点餐系统(2) 今天的例子,还是上一次谈到的快餐点餐系统.只不过,今天我们从订单的角度来构造这个系统.最先还是有请上次的主角们:主餐: class Burger(): name="" price=0.0 def getPrice(self): return self.price def setPrice(self,price): self.price=price def getName(self): return self.name class cheeseBurger(Bur

.NET设计模式-建造者模式(Builder Pattern)

建造者模式(Builder Pattern) --.NET设计模式系列之四 Terrylee,2005年12月17日 概述 在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定.如何应对这种变化?如何提供一种"封装机制"来隔离出"复杂对象的各个部分"的变化,从而保持系统中的"稳定构建算法"

设计模式之禅之设计模式-建造者模式

一:建造者模式的定义        --->建造者模式(Builder Pattern)也叫做生成器模式,其定义如下:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示        ● Product产品类                通常是实现了模板方法模式,也就是有模板方法和基本方法,这个参考模板方法模式.例子中的BenzModel和BMWModel就属于产品类.        ● Builder抽象建造者                规范产品的组建,一般是由子类

设计模式-建造者模式+模板模式=自定义用户需求

本博原创禁止转载.拷贝.拍照等一切商业目地,否则将保留法律权利! ----- public abstract class CarModel { //这个参数是各个基本方法执行的顺序private ArrayList<String> sequence = new ArrayList<String>(); /** 模型是启动开始跑了*/protected abstract void start(); //能发动,那还要能停下来,那才是真本事protected abstract void

Java运用设计模式中的建造者模式构建项目的实例解析_java

1.建造者模式概念定义: 将一个复杂的对象构建与其表示相分离,使得同样的构建过程可以创建不同的表示: 核心 : 构建与表示分离,同构建不同表示 区别于 抽象工厂模式 : (1)与抽象工厂模式 相似,因为它也可以创建复杂对象.主要的区别是建造者模式着重于 一步步构造一个复杂对象,关注的是零件类型和装配工艺的顺序 .而抽象工厂模式着重于多个系列的产品对象(简单的或是复杂的).建造者模式在最后的一步返回产品,而对于抽象工厂来说,产品是立即返回的. (2)在建造者模式里,有个指导者,由指导者来管理建造者

设计模式的C++实现之建造者模式

解决的问题: 我创建的这个对象比较复杂,且该对象里面的成员函数用不同的实现来表示不同的实例,换句话说 就是同样的对象构建过程可以有不同的表示.比如我那天去吃过桥米线,他们有不同的套餐,套餐里包含的种类是一样的, 都有一碗米线,一份凉菜,一杯饮料.但是不同的套餐里这3样又都不是全部一样的.此时我们就可以用建造者模式. 类图结构: 1.建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造.一般而言,此接口独立于应 用程序的商业逻辑.模式中直接创建产品对象的是具体建造者(