软考软件设计师下午真题-面向对象的程序设计与实现-策略设计模式(2019年上半年试题六))代码讲解

软考软件设计师下午真题-面向对象的程序设计与实现-策略设计模式(2019年上半年试题六))代码讲解

说明

某软件公司欲开发一款汽车竞速类游戏,需要模拟长轮胎和短轮胎急刹车时在路面上留下的不同痕迹,并考虑后续能模拟更多种轮胎急刹车时的痕迹。
现采用策略(Strategy)设计模式来实现该需求,其类图如下图所示。

在这里插入图片描述

Java代码

import java.util.*;			//把util这个包下的全部类导入到程序中
							//*表示的是通配符,包括util的所有类

//Car使用接口BrakeBehavior来调用LongWheelBrake和ShortWheelBrake定义的算法
interface BrakeBehavior {	//定义算法的公共接口BrakeBehavior
	public void stop();
/* 其余代码省略 */
}

class LongWheelBrake implements BrakeBehavior { //定义实现接口BrakeBehavior的类LongWheelBrake(长轮胎刹车)
	public void stop() { 
		System.out.println("模拟长轮胎刹车痕迹!"); 
	}
/* 其余代码省略 */
}

class ShortWheelBrake implements BrakeBehavior { //定义实现接口BrakeBehavior的类ShortWheelBrake(短轮胎刹车)
	public void stop() { 
		System.out.println("模拟短轮胎刹车痕迹!"); 
	}
/* 其余代码省略 */
}

//将Car与BrakeBehavior联系起来
abstract class Car {	//定义抽象类Car,用于定义和维护对BrakeBehavior对象的引用
	protected BrakeBehavior wheel;	//定义刹车特征变量wheel
	public void brake() { 
		wheel.stop();	//通过Car的变量wheel来调用BrakeBehavior所提供的公共接口stop
	}	
/* 其余代码省略 */
}

//依据策略对象来调用不同的策略算法
class ShortWheelCar extends Car {	//定义子类ShortWheelCar,特征是短轮胎刹车
	public ShortWheelCar(BrakeBehavior behavior) {	//定义公有属性的同名构造方法ShortWheelCar
		wheel = behavior;	//构造方法是对类的构造,带参构造函数一般是对其父类的属性wheel进行参数赋值
	}
/* 其余代码省略 */
}

class StrategyTest {
	public static void main(String[] args) {	//定义主方法(程序入口)
		BrakeBehavior brake = new ShortWheelBrake();	//实例化ShortWheelBrake,赋值给brake变量
		ShortWheelCar car1 = new ShortWheelCar(brake);	//实例化ShortWheelCar,赋值给car1变量
		car1.brake();	//通过StrategyTest的变量car1来调用ShortWheelCar继承父类Car的方法brake
	}
}

注释

几点需要记住的:

  1. BrakeBehavior对应Strategy;
  2. LongWheelBrake、ShortWheelBrake对应ConcreteStrategy;
  3. Car对应Context;
  4. 抽象类不一定有抽象方法,有抽象方法的一定是抽象类;
  5. 抽象类需要子类去继承,即extends;
  6. 接口需要子类去实现,即implements,实现接口就要实现接口中的所有方法;
  7. 接口里的方法都是抽象类,abstract省略;
  8. protected表示受保护的,只有本类或子类或父类中可以访问;
  9. 枚举类自动添加public、static、final修饰;
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值