本博原创禁止转载、拷贝、拍照等一切商业目地,否则将保留法律权利!
-----
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 abstract class CarBuilder {
//建造一个模型,你要给我一个顺序要,就是组装顺序
public abstract void setSequence(ArrayList<String> sequence);
//设置完毕顺序后,就可以直接拿到这个这两模型
public abstract CarModel getCarModel();
}
-------------------------
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 BMWBuilder extends CarBuilder {
private BMWModel bmw = new BMWModel();
@Override
public CarModel getCarModel() {
return this.bmw;
}
@Override
public void setSequence(ArrayList<String> sequence) {
this.bmw.setSequence(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 BenzBuilder extends CarBuilder {
private BenzModel benz = new BenzModel();
@Override
public CarModel getCarModel() {
return this.benz;
}
@Override
public void setSequence(ArrayList<String> sequence) {
this.benz.setSequence(sequence);
}
}
----------------------------------
public class Director {
private ArrayList<String> sequence = new ArrayList();
private BenzBuilder benzBuilder = new BenzBuilder();
private BMWBuilder bmwBuilder = new BMWBuilder();
/*
* A类型的奔驰车模型,先start,然后stop,其他什么引擎了,喇叭一概没有
*/
public BenzModel getABenzModel(){
//清理场景,这里是一些初级程序员不注意的地方
this.sequence.clear();
//这只ABenzModel的执行顺序
this.sequence.add("start");
this.sequence.add("stop");
//按照顺序返回一个奔驰车
this.benzBuilder.setSequence(this.sequence);
return (BenzModel)this.benzBuilder.getCarModel();
}
/*
* B型号的奔驰车模型,是先发动引擎,然后启动,然后停止,没有喇叭
*/
public BenzModel getBBenzModel(){
this.sequence.clear();
this.sequence.add("engine boom");
this.sequence.add("start");
this.sequence.add("stop");
this.benzBuilder.setSequence(this.sequence);
return (BenzModel)this.benzBuilder.getCarModel();
}
/*
* C型号的宝马车是先按下喇叭(炫耀嘛),然后启动,然后停止
*/
public BMWModel getCBMWModel(){
this.sequence.clear();
this.sequence.add("alarm");
this.sequence.add("start");
this.sequence.add("stop");
this.bmwBuilder.setSequence(this.sequence);
return (BMWModel)this.bmwBuilder.getCarModel();
}
/*
* D类型的宝马车只有一个功能,就是跑,启动起来就跑,永远不停止,牛叉
*/
public BMWModel getDBMWModel(){
this.sequence.clear();
this.sequence.add("start");
this.bmwBuilder.setSequence(this.sequence);
return (BMWModel)this.benzBuilder.getCarModel();
}
/*
* 这边很可以有很多方法,你可以先停止,然后再启动,或者一直停着不动,静态的嘛
* 导演类嘛,按照什么顺序是导演说了算
*/
}
-------------------
public class Client {
public static void main(String[] args) {
Director director = new Director();
//1W辆A类型的奔驰车
for(int i=0;i<10000;i++){
director.getABenzModel().run();
}
//100W辆B类型的奔驰车
for(int i=0;i<1000000;i++){
director.getBBenzModel().run();
}
//1000W量C类型的宝马车
for(int i=0;i<10000000;i++){
director.getCBMWModel().run();
}
}
}
案例说明:该模式虽类似工厂模式,单强调用户顺序需求,也就是自定义需求,结合模板模式,可以方便的独立扩展。
本博原创禁止转载、拷贝、拍照等一切商业目地,否则将保留法律权利!
分享到:
相关推荐
C# 3.0 设计模式是面向对象...通过理解和熟练运用这些设计模式,开发者可以编写出更具弹性和可维护性的代码,以适应不断变化的需求。而"《C# 3.0设计模式》"这本书可能会深入探讨这些主题,提供丰富的示例和实践指导。
3. **建造者模式**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。Java中的Builder模式用于创建复杂的对象结构。 4. **原型模式**:通过复制已有对象来创建新对象,减少了创建新对象...
设计模式是软件开发中的一种重要概念,它代表了在实践中被广泛接受并验证过的最佳解决方案。...在实际项目中,根据具体需求选择合适的设计模式,可以显著提高代码质量,降低维护成本,同时促进团队间的有效沟通。
在iOS开发中,设计模式是一种解决常见编程问题的模板或最佳实践,它们是经验丰富的开发者在不断尝试和优化后总结出的解决方案。本资源“IOS 设计模式 + 代码”聚焦于Objective-C语言中用于iOS开发的设计模式,通过...
C++设计模式大总结是一个全面概述C++编程中常用设计模式的资源集合,旨在帮助学习者深入理解和应用这些模式。这个资源包含一个Visual Studio工程,方便用户进行学习、复习以及进一步的开发和改进。让我们逐一探讨...
在iOS开发中,设计模式是开发者们为了解决常见问题而形成的一种最佳实践。它们是经过时间验证、可重用的解决方案模板,可以帮助我们构建高效、可维护和扩展的代码。本资源“iOS 设计模式及源码实现”深入探讨了iOS...
在IT行业中,设计模式是一种被广泛认可的解决软件设计中常见问题的最佳实践。"QtC++设计模式代码"集合提供了一种学习和应用C++与Qt框架中设计模式的资源。设计模式是经验丰富的开发者们在长期实践中总结出的通用解决...
5. 模板方法模式:JUnit的测试框架本身就是一个模板方法设计模式的例子。每个测试用例都遵循一个固定的执行流程(设置-执行-验证-清理),这个流程由JUnit框架定义,而具体的测试逻辑则由用户编写。 6. 装饰者模式...
1. **模式识别**:分析用户的代码,自动检测并标记出已经使用或可以使用的设计模式,帮助开发者识别代码中的模式结构。 2. **模板生成**:提供设计模式的代码模板,一键生成模式的基本结构,加快编码速度,例如单例...
工厂模式可以用于创建视图或者自定义组件,而建造者模式在复杂对象构建时很有用,比如Activity的启动参数设置。观察者模式则广泛应用于事件处理,如用户界面的更新。 标签“安卓设计模式”进一步确认了这个压缩包...
4. **建造者模式(Builder)**:将复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示。在C++11中,可以使用初始化列表和构造函数结合来实现这一模式。 5. **原型模式(Prototype)**:用原型实例...
Java企业设计模式是软件开发中不可或缺的一部分,它们是经过时间考验、被广泛接受的解决方案模板,用于解决在大型企业级应用程序开发中常见的问题。这些模式提供了可重用的结构,帮助开发者更有效地组织代码,提高...
Java设计模式是软件开发中的一种最佳实践,它们是解决常见编程问题的经验总结,可以提高代码的可维护性、可扩展性和可重用性。Eclipse作为一款强大的Java集成开发环境(IDE),为开发者提供了丰富的功能,包括对设计...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。...在实际项目中,根据需求和场景灵活运用设计模式,可以使代码结构更加清晰,代码复用性更高,从而提升整个项目的整体品质。
4. 建造者模式:建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在PHP中,它可以用于构建多步骤的对象,如配置对象或页面元素。 5. 代理模式:代理模式为其他对象提供一种代理以...
本书涵盖了多种经典的设计模式,如单例模式、工厂模式、观察者模式、适配器模式、装饰器模式、代理模式、建造者模式、策略模式、模板方法模式等。 1. **单例模式**:在Android中,单例模式常用于管理全局唯一的对象...
设计模式是一种在特定情况下解决软件设计问题的经验总结,它提供了一种通用的解决方案模板,可以帮助开发者更好地组织代码结构、降低模块间的耦合度并提高系统的灵活性。对于Android开发者而言,掌握常见的设计模式...
Java的23种设计模式是软件工程中非常重要的概念,它们是解决常见编程问题的成熟解决方案,被广泛应用于各种复杂的软件开发中。设计模式不是具体的代码或库,而是一种通用的、可重用的设计方案,它描述了在特定上下文...
4. **建造者模式(Builder)** - 将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。C++中可以使用组合和封装来实现。 5. **原型模式(Prototype)** - 允用一个对象来创建与其具有相同状态的...