实验11:装饰模式

news/2024/12/31 6:57:20/文章来源:https://www.cnblogs.com/yuanxinglan/p/18529226

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

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

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

 

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

 

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

 

实验要求:

 

1.提交类图;

 

2.提交源代码;

 

3.注意编程规范。

 

1类图

 

源代码

package org.example;

public class Changer implements Phone{
    private Phone phone;
    public Changer(Phone p) {
        this.phone=p;
    }
    public void voice() {
        phone.voice();
    }
}

package org.example;

public class Client {
    public static void main(String[] args) {
        Phone phone;
        phone=new SimplePhone();
        phone.voice();
        JarPhone jarphone=new JarPhone(phone);
        jarphone.voice();
        jarphone.zhendong();
        ComplexPhone complexphone = new ComplexPhone(phone);
        complexphone.zhendong();
        complexphone.dengguang();
    }
}

package org.example;

public class ComplexPhone extends Changer{
    public ComplexPhone(Phone p) {
        super(p);
        System.out.println("ComplexPhone");
    }
    public void zhendong() {
        System.out.println("会震动!");
    }
    public void dengguang() {
        System.out.println("会发光!");
    }
}

package org.example;

public class JarPhone extends Changer{
    public JarPhone(Phone p) {
        super(p);
        System.out.println("Jarphone");
    }
    public void zhendong() {
        System.out.println("会震动!");
    }
}

package org.example;

public interface Phone {
    public void voice();
}

package org.example;

public class SimplePhone implements Phone {
    public void voice() {
        System.out.println("发出声音!");
    }
}

 

3、运行截图

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/827496.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pbootcms网站,从Apache切换为Nginx后网站打不开

打开网站设置登录宝塔面板。 选择需要配置的网站,点击“设置”。进入伪静态设置在网站设置页面中,找到并点击“伪静态”选项卡。添加Nginx伪静态规则在伪静态设置中,清空原有规则或选择自定义规则。 输入以下Nginx伪静态规则:location / {if (!-e $request_filename){rewri…

2024/11/06

软件设计 实验10:组合模式 用透明组合模式实现教材中的“文件夹浏览”这个例子。 类图 public abstract class AbstractFile {public abstract void add(AbstractFile element);public abstract void remove(AbstractFile element);public abstract void display(int depth); …

SQLSTATE[HY000] [1045] Access denied for user ‘root‘@‘localhost‘ (using password: YES)

错误解析错误代码:SQLSTATE[HY000] [1045] 错误信息:Access denied for user ‘root’@‘localhost’ (using password: YES)可能的原因密码错误:提供的密码与数据库中存储的密码不匹配。 用户权限问题:用户root可能没有从localhost访问数据库的权限。 配置文件问题:MySQL…

帝国CMS更改域名后信息地址中的域名不变解决方法

修改系统参数设置进入“系统参数设置 - 基本属性 - 网站地址”,设置为 /。 不要填写具体的域名,以避免信息地址变成绝对地址。更新信息页地址进入“系统 - 数据更新 - 更新信息页地址”,选择相应的数据表,点击“扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年…

帝国CMS系统后台批量删除不带标题图片信息

执行SQL语句删除不带标题图片的信息:delete from [表前缀]_ecms_news where titlepic = ; delete from [表前缀]_ecms_news_index where id not in (select id from [表前缀]_ecms_news); delete from [表前缀]_ecms_news_data_1 where id not in (select id from [表前缀]_ec…

帝国CMS留言模板提示请输入姓名,邮箱与留言内容解决方法

检查表单提交:确认提交地址、POST 数据和表单字段正确。 在表单中添加隐藏字段 bid: <input name="bid" type="hidden" value="分类ID" />扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HT…

信息安全新篇章:车企图纸安全外发创新方案!

车企的图纸在其业务流程中会与多个环节产生交集,并涉及到图纸安全外发传输。以下是主要涉及的环节及图纸传输发送的相关情况: 1.市场分析报告、概念草图、初步布置图等图纸:需要在设计团队内部进行传输,以供讨论和修改。同时,需要发送给供应商或合作伙伴进行初步评估和反馈…

宝塔安装好后网址打不开的可能原因及解决方法

检查域名解析确认域名是否正确解析到服务器的IP地址。 可以使用 ping 命令测试域名解析是否正确。检查服务器网络确认服务器的网络连接是否正常。 尝试从服务器内部访问外部网站,确保网络畅通。检查防火墙设置确认服务器的防火墙设置是否允许HTTP/HTTPS流量通过。 默认情况下,…

腾讯云服务器配置windows安装宝塔

在腾讯云服务器上配置 Windows 并安装宝塔面板的步骤如下: 1. 购买和配置腾讯云 Windows 服务器登录腾讯云控制台:访问 腾讯云官网 并登录你的账号。创建 Windows 服务器:进入“云服务器”页面,点击“创建实例”。 选择 Windows 操作系统,例如 Windows Server 2019 数据中…

变电站刀闸开合闸状态识别系统

变电站刀闸开合闸状态识别系统基于AI人工智能和机器视觉技术,变电站刀闸开合闸状态识别系统通过利用现场已有的监控摄像头,实现对变电站刀闸的开合状态、人员行为、环境状态以及设备状态和缺陷的实时监测和分析。通过对这些信息的处理和分析,该系统能够及时发现异常情况,有…

保障能源电力数据安全:内外网数据交换的最佳实践方案!

能源电力企业在数字化转型的过程中,会产生和积累大量核心数据,这些数据不仅关系到企业的运营效率和决策质量,也是企业的重要资产和竞争优势所在。基于网络安全考虑,通过会采用网闸将网络隔离为内网、外网。网络隔离后,仍存在内外网数据交换场景,进行日常办公文件的交换,…

一个.NET开源、轻量级的运行耗时统计库 - MethodTimer

前言 在.NET开发中,为了准确统计对应方法的执行时间,我们最常用的方式是手动使用 Stopwatch 来显式编写计时逻辑,但是假如你需要大量的使用 Stopwatch 来进行耗时统计的话不利于保持代码的整洁和增加代码的维护成本。 项目介绍 MethodTimer是一个.NET开源、免费(MIT Licens…