2024.11.8

设计模式实验十一

软件设计                  石家庄铁道大学信息学院

 

实验11:装饰模式

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

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

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

 
   

 

 

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

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

实验要求:

1.     提交类图;

 

 

2.     提交源代码;

Phone.java

public interface Phone {

    void receiveCall();  // 接收来电,触发提示

}

SimplePhone.java

public class SimplePhone implements Phone {

    @Override

    public void receiveCall() {

        System.out.println("SimplePhone: Ringing...");

    }

}

PhoneDecorator.java

public abstract class PhoneDecorator implements Phone {

    protected Phone phone;  // 组合的Phone对象

 

    public PhoneDecorator(Phone phone) {

        this.phone = phone;

    }

 

    @Override

    public void receiveCall() {

        phone.receiveCall();  // 委托给被装饰的Phone对象

    }

}

JarPhone.java

public class JarPhone extends PhoneDecorator {

    public JarPhone(Phone phone) {

        super(phone);

    }

 

    @Override

    public void receiveCall() {

        super.receiveCall();  // 调用基础功能

        vibrate();             // 添加振动功能

    }

 

    private void vibrate() {

        System.out.println("JarPhone: Vibrating...");

    }

}

ComplexPhone.java

public class ComplexPhone extends PhoneDecorator {

    public ComplexPhone(Phone phone) {

        super(phone);

    }

 

    @Override

    public void receiveCall() {

        super.receiveCall();  // 调用基础功能

        vibrate();             // 添加振动功能

        flashLight();          // 添加闪光灯功能

    }

 

    private void vibrate() {

        System.out.println("ComplexPhone: Vibrating...");

    }

 

    private void flashLight() {

        System.out.println("ComplexPhone: Flashing light...");

    }

}

Main.java

public class Main {

    public static void main(String[] args) {

        Phone simplePhone = new SimplePhone();

        simplePhone.receiveCall();

        System.out.println("-------------");

 

        Phone jarPhone = new JarPhone(simplePhone);

        jarPhone.receiveCall();

        System.out.println("-------------");

 

        Phone complexPhone = new ComplexPhone(jarPhone);

        complexPhone.receiveCall();

    }

}

3.注意编程规范。

 

 

posted @ 2024-12-25 10:03  cvjj  阅读(9)  评论(0)    收藏  举报