实现小鸟高飞案例。系统中抽象类Sparrow有一个子类BlackSparrow。请利用装饰模式使得小鸟能飞行 150米、180米、210米240及270米. java编写代码实现
时间: 2024-12-13 15:22:42 浏览: 3
java笔试题2015-sparrow:一个高效的web/http服务器...(多线程&&非阻塞I/O&&epoll)
在Java中,我们可以使用装饰者模式(Decorator Pattern)来实现这个需求,装饰者模式允许我们在不影响其他对象的情况下,动态地给一个对象添加新的功能或责任。在这个场景下,我们创建一个`FlyBehavior`接口表示飞翔的行为,然后`Sparrow`作为抽象类,`BlackSparrow`是其子类。为了实现不同飞行高度的功能,我们将创建一系列的装饰器类,每个装饰器都代表一种额外的高度。
首先,定义`FlyBehavior`接口:
```java
public interface FlyBehavior {
void fly();
}
```
接着,创建`Sparrow`抽象类:
```java
public abstract class Sparrow implements Bird {
private FlyBehavior flyBehavior;
public Sparrow(FlyBehavior behavior) {
this.flyBehavior = behavior;
}
@Override
public void display() {
System.out.println("这是一只小鸟");
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
// 调用具体的飞行行为
protected void performFly() {
flyBehavior.fly();
}
}
```
然后,创建`BlackSparrow`子类:
```java
public class BlackSparrow extends Sparrow {
public BlackSparrow(FlyBehavior behavior) {
super(behavior);
System.out.println("这是一个黑鸟");
}
}
```
接下来,创建装饰器系列,比如`ExtraFlightHeight`装饰器:
```java
public class ExtraFlightHeightDecorator implements FlyBehavior {
private final FlyBehavior delegate;
public ExtraFlightHeightDecorator(FlyBehavior flyBehavior, int height) {
this.delegate = flyBehavior;
System.out.println("额外飞行高度:" + height + "米");
}
@Override
public void fly() {
delegate.fly(); // 执行基础行为
System.out.println("这只小鸟飞行了额外的" + height + "米");
}
}
```
现在我们可以根据需要组合装饰器:
```java
public static void main(String[] args) {
FlyBehavior baseFlyBehavior = new FlyBehavior() {
@Override
public void fly() {
System.out.println("小鸟飞行了150米");
}
};
// 创建黑鸟实例并添加基础飞行行为
BlackSparrow blackSparrow = new BlackSparrow(baseFlyBehavior);
// 添加装饰器,模拟更高飞行高度
FlyBehavior decoratedFlyBehavior = new ExtraFlightHeightDecorator(baseFlyBehavior, 30); // 150 + 30
blackSparrow.setFlyBehavior(decoratedFlyBehavior);
// 显示飞行信息
blackSparrow.display();
blackSparrow.performFly();
// 可以添加更多装饰器,如 `new ExtraFlightHeightDecorator(decoratedFlyBehavior, 60)` 等
}
```
阅读全文