24.11.26

实验11:装饰模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解装饰模式的动机,掌握该模式的结构;

2、能够利用装饰模式解决实际问题。

[实验任务一]:手机功能的升级

用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而JarPhone除了声音还能振动;更高级的手机(ComplexPhone)除了声音、振动外,还有灯光闪烁提示。

实验要求:

1.提交类图;

2.提交源代码;

3.注意编程规范。

 

  1. 类图

 

 

  1. 源代码:

// 手机接口

interface Phone {

    void receiveCall();  // 接收来电

}

 

// 简单的手机类,仅有声音提示

class SimplePhone implements Phone {

    @Override

    public void receiveCall() {

        System.out.println("发出声音提示:叮叮叮...");

    }

}

 

// 抽象装饰类,持有一个 Phone 对象的引用

abstract class PhoneDecorator implements Phone {

    protected Phone decoratedPhone;

 

    public PhoneDecorator(Phone phone) {

        this.decoratedPhone = phone;

    }

 

    @Override

    public void receiveCall() {

        decoratedPhone.receiveCall();  // 调用原有的接收来电方法

    }

}

 

// 振动装饰类

class VibrationDecorator extends PhoneDecorator {

    public VibrationDecorator(Phone phone) {

        super(phone);

    }

 

    @Override

    public void receiveCall() {

        super.receiveCall();

        addVibration();  // 增加振动功能

    }

 

    private void addVibration() {

        System.out.println("增加振动提示:嗡嗡嗡...");

    }

}

 

// 灯光装饰类

class LightDecorator extends PhoneDecorator {

    public LightDecorator(Phone phone) {

        super(phone);

    }

 

    @Override

    public void receiveCall() {

        super.receiveCall();

        addLight();  // 增加灯光闪烁功能

    }

 

    private void addLight() {

        System.out.println("增加灯光提示:闪闪闪...");

    }

}

 

// 测试类

public class Main {

    public static void main(String[] args) {

        // 简单手机,仅有声音提示

        Phone simplePhone = new SimplePhone();

        System.out.println("SimplePhone 来电提醒:");

        simplePhone.receiveCall();

 

        // 中级手机(JarPhone),增加振动提示

        Phone jarPhone = new VibrationDecorator(new SimplePhone());

        System.out.println("\nJarPhone 来电提醒:");

        jarPhone.receiveCall();

 

        // 高级手机(ComplexPhone),增加声音、振动、灯光提示

        Phone complexPhone = new LightDecorator(new VibrationDecorator(new SimplePhone()));

        System.out.println("\nComplexPhone 来电提醒:");

        complexPhone.receiveCall();

    }

}

posted on 2024-11-26 18:31  Daniel350  阅读(15)  评论(0)    收藏  举报