首页 > 其他分享 >装饰模式

装饰模式

时间:2024-12-30 22:30:22浏览次数:1  
标签:receiveCall phone void 模式 public Phone 装饰

实验11:装饰模式

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

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

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

 

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

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

实验要求:

1. 提交类图;

 

2.提交源代码;

 

// 基础手机接口  

public interface Phone {  

    void receiveCall();  

}  

 

// 简单手机实现  

public class SimplePhone implements Phone {  

    @Override  

    public void receiveCall() {  

        System.out.println("Receiving call: Sound alert");  

    }  

}  

 

// 装饰器基类  

public abstract class PhoneDecorator implements Phone {  

    protected Phone phone;  

 

    public PhoneDecorator(Phone phone) {  

        this.phone = phone;  

    }  

 

    @Override  

    public void receiveCall() {  

        if (phone != null) {  

            phone.receiveCall();  

        }  

    }  

}  

 

// 振动装饰器  

public class VibrationDecorator extends PhoneDecorator {  

    public VibrationDecorator(Phone phone) {  

        super(phone);  

    }  

 

    @Override  

    public void receiveCall() {  

        super.receiveCall();  

        vibrate();  

    }  

 

    private void vibrate() {  

        System.out.println("Vibration alert");  

    }  

}  

 

// 灯光装饰器  

public class LightDecorator extends PhoneDecorator {  

    public LightDecorator(Phone phone) {  

        super(phone);  

    }  

 

    @Override  

    public void receiveCall() {  

        super.receiveCall();  

        flashLight();  

    }  

 

    private void flashLight() {  

        System.out.println("Flashing light alert");  

    }  

}  

 

// 主方法测试  

public class Main {  

    public static void main(String[] args) {  

        Phone simplePhone = new SimplePhone();  

        simplePhone.receiveCall();  

 

        Phone jarPhone = new VibrationDecorator(simplePhone);  

        jarPhone.receiveCall();  

 

        Phone complexPhone = new LightDecorator(jarPhone);  

        complexPhone.receiveCall();  

    }  

}  

3.注意编程规范。

 

 

标签:receiveCall,phone,void,模式,public,Phone,装饰
From: https://www.cnblogs.com/Christmas77/p/18642609

相关文章

  • 组合模式
    实验10:组合模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解组合模式的动机,掌握该模式的结构;2、能够利用组合模式解决实际问题。 [实验任务一]:组合模式用透明组合模式实现教材中的“文件夹浏览”这个例子。实验要求:1.文件的执行不需真正实现,只需简单提......
  • 解锁 Java 解释器模式:赋予程序理解 “新语言” 的魔力
    解锁Java解释器模式:赋予程序理解“新语言”的魔力在Java编程的广袤天地中,我们时常面临需要处理自定义规则、语法或逻辑表达式的场景。此时,解释器模式(InterpreterPattern)宛如一位神奇的翻译官,能够将这些看似晦涩难懂的“新语言”,转化为计算机能够理解并执行的指令,为......
  • 揭秘 Java 中介者模式:解耦复杂交互的神奇钥匙
    揭秘Java中介者模式:解耦复杂交互的神奇钥匙在Java开发的浩瀚天地里,随着系统复杂度的与日俱增,对象之间的交互常常变得错综复杂,宛如一团乱麻。此时,中介者模式(MediatorPattern)宛如一位智慧的协调大师,挺身而出,为我们理清理顺这些复杂的关系,打造更为优雅、易于维护的代码架......
  • 深入理解 Java 模板模式:代码复用与架构优化的利器
    深入理解Java模板模式:代码复用与架构优化的利器在Java编程世界中,设计模式如同智慧的结晶,帮助开发者应对各种复杂的软件开发需求。其中,模板模式(TemplatePattern)以其独特的代码复用和流程标准化能力,成为构建灵活且可维护系统的关键工具。今天,让我们一同深入探究Java中......
  • Spring中的设计模式
    Spring中的设计模式控制反转(IoC)和依赖注入(DI)IoC是一个原则,而不是一个模式,以下模式(但不限于)实现了IoC原则。**SpringIoC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。**IoC容器负责创......
  • 超低功耗段LCD液晶段码显示屏驱动芯片(ic)VKL128 LQFP44 I2C通信接口/可配置4种功耗模
    产品品牌:永嘉微电/VINKA产品型号:VKL128封装形式:SSOP44概述VKL128是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM)的LCD屏。单片机可通过I2C接口配置显示参数和读写显示数据,可配置4种功耗模式,也可通过关显示和关振荡器进入省电模式。其高抗干扰,低功耗的特性适用于......
  • Slate文档编辑器-Decorator装饰器渲染调度
    Slate文档编辑器-Decorator装饰器渲染调度在之前我们聊到了基于文档编辑器的数据结构设计,聊了聊基于slate实现的文档编辑器类型系统,那么当前我们来研究一下slate编辑器中的装饰器实现。装饰器在slate中是非常重要的实现,可以为我们方便地在编辑器渲染调度时处理range的渲染。在......
  • DiskSpd 是一个由微软开发的强大的存储性能测试工具,主要用于测试磁盘、存储设备和系统
    ReleaseDISKSPD2.2·microsoft/diskspd·GitHub 什么是DiskSpd?DiskSpd是一个由微软开发的强大的存储性能测试工具,主要用于测试磁盘、存储设备和系统的I/O性能。它是一个命令行工具,允许用户模拟不同的负载模式(如顺序读取、顺序写入、随机读取、随机写入等)来评估磁盘......
  • 【html】通用布局模式,让容器充满父元素,且center部分始终充满剩余空间,可无限嵌套
    源码采用vue3写法实现:Panel.vue<!--专用于布局的面板,可以无限嵌套,核心思想是保证center部分充满整个剩余空间--><template> <divclass="container"> <divclass="top"> <slotname="top"/> </div> <divclass="middle&q......
  • 状态模式
    实验 22:状态模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 1、理解状态模式的动机,掌握该模式的结构;2、能够利用状态模式解决实际问题。 [实验任务一]:银行账户 用Java代码模拟实现课堂上的“银行账户”的实例,要求编写客户端测试代码模拟用户存款和取款,注意......