利用Java语言编写。实现小鸟高飞案例,系统中抽象类Sparrow有一个子类BlackSparrow,请利用装饰模式使小鸟能飞行150米、180米、210米240米、270米。 (1)画出UML类图,并写出运行结果 (2)编写代码实现
时间: 2024-12-13 09:22:40 浏览: 2
java笔试题2015-sparrow:一个高效的web/http服务器...(多线程&&非阻塞I/O&&epoll)
在Java中,我们可以使用装饰者模式(Decorator Pattern)来动态地改变小鸟的行为,例如飞行距离。首先,我们需要创建一个抽象的`Sparrow`类作为基础,然后创建具体的`BlackSparrow`子类。装饰器模式会引入一个新的`FlyBehavior`接口和其实现类`FlyDistance`系列,每个`FlyDistance`类代表不同的飞行距离。下面是UML类图及代码实现:
**UML类图**(假设图形无法直接绘制,文字描述如下):
```
+----------------+ +----------------+
| Sparrow | ---->+ FlyBehavior | |
+----------------+ / v |
| +---------------+------+
| | Fly150m | |
| +---------------+-----+
| |
+----------------+ <----+ FlyBehavior | | Fly210m |
| BlackSparrow + | +-----+---------+
+----------------+ / v
| Fly180m | Fly240m
+--+---------+
| |
+-------v
| Fly270m
+---------
```
**代码实现**:
```java
// 抽象类Sparrow
abstract class Sparrow {
protected FlyBehavior flyBehavior;
public void setFlyBehavior(FlyBehavior behavior) {
this.flyBehavior = behavior;
}
// 虚方法让子类覆盖实现飞翔行为
abstract void fly();
}
// 子类BlackSparrow
class BlackSparrow extends Sparrow {
@Override
void fly() {
System.out.println("Black Sparrow is flying.");
flyBehavior.fly();
}
}
// 装饰者接口和实现类
interface FlyBehavior {
void fly();
}
class Fly150m implements FlyBehavior {
@Override
public void fly() {
System.out.println("Flying for 150 meters...");
}
}
class Fly180m implements FlyBehavior {
@Override
public void fly() {
System.out.println("Flying for 180 meters...");
}
}
// 其他距离版本同理...
// 主程序
public class Main {
public static void main(String[] args) {
BlackSparrow sparrow = new BlackSparrow();
sparrow.setFlyBehavior(new Fly150m()); // 小鸟初始飞行150米
sparrow.fly(); // 输出:Black Sparrow is flying. Flying for 150 meters...
// 动态更换装饰器,增加飞行距离
sparrow.setFlyBehavior(new Fly180m());
sparrow.fly(); // 输出:Black Sparrow is flying. Flying for 180 meters...
// 更改多次,如需其他距离版本自行添加并设置
}
}
```
运行上述代码,每次调用`sparrow.fly()`时,都会打印相应装饰器所代表的飞行距离。
阅读全文