首页 > 其他分享 >25

25

时间:2025-01-06 23:35:42浏览次数:1  
标签:receiveCall 25 Phone void class phone public

实验11:装饰模式

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

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

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

 

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

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

实验要求:

1. 提交类图;

 

2. 提交源代码;

JAVA

public class Changer implements Phone{

    private Phone phone;

    public Changer(Phone p) {

        this.phone=p;

    }

    public void voice() {

        phone.voice();

    }

}

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("会发光!");

    }

}

public class JarPhone extends Changer{

    public JarPhone(Phone p) {

        super(p);

        System.out.println("Jarphone");

    }

    public void zhendong() {

        System.out.println("会震动!");

    }

}

public interface Phone {

    public void voice();

}

public class SimplePhone implements Phone{

     public void voice() {

            System.out.println("发出声音!");

        }

}

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();

    }

}

 

C++

#include <iostream>

using namespace std;

class Phone

{

public:

    virtual void receiveCall(){};

};

class SimplePhone:public Phone

{

public:

    virtual void receiveCall(){

        cout<<"发出声音!"<<endl;

    }

};

class PhoneDecorator:public Phone {

protected:

    Phone *phone;

public:

    PhoneDecorator(Phone *p)

    {

        phone=p;

    }

    virtual void receiveCall()

    {

        phone->receiveCall();

    }

};

class JarPhone:public PhoneDecorator{

public:

    JarPhone(Phone *p):PhoneDecorator(p){}

    void receiveCall()

    {

        phone->receiveCall();

        cout<<"会震动!"<<endl;

    }

};

class ComplexPhone:public PhoneDecorator{

public:

    ComplexPhone(Phone *p):PhoneDecorator(p){}

    void receiveCall()

    {

        phone->receiveCall();

        cout<<"会发光!"<<endl;

    }

};

int main()

{

    Phone *p1=new SimplePhone();

    p1->receiveCall();

    cout<<"Jarphone"<<endl;

    Phone *p2=new JarPhone(p1);

    p2->receiveCall();

    cout<<"ComplexPhone"<<endl;

    Phone *p3=new ComplexPhone(p2);

    p3->receiveCall();

    return 0;

}

 

3.注意编程规范。

 

 

标签:receiveCall,25,Phone,void,class,phone,public
From: https://www.cnblogs.com/wanbeibei/p/18656525

相关文章

  • 【办公类-88-02】20250106批量读后感
    背景需求学期总结开始写各种总结同事请我代写我手里写5个老师要写。就想试试能不能用“星火讯飞写稿子”+Python(excle\word)批量生成)一、AI生成读后感星火讯飞写出来的读后感内容相同,所以要用不同的关键词1、不同岗位:假如您是一位班主任、假如您是一位幼儿园管理者、......
  • Diary - 2025.01.06
    发现昨天日期写成2024了。明天计划来说应该是主要写题解了!!!上午还有个模拟赛,但是说不定又是像之前那样拉个USACO来(?)。仍记那时USACO金组没ak,t3被卡常了,6。明天要写的题解:LuoguP11513[ROIR2017Day2]培训LuoguP11509[ROIR2017Day1]挖矿机器人LuoguP1004......
  • 用 2025 年的工具,秒杀了 2022 年的题目。
    你好呀,我是歪歪。前几天打开知乎的时候,在付费咨询模块,我看到了一个差不多两年半前没有回答的技术问题。其实这个问题问的很清晰了,但是当时我拒绝了:虽然过去快两年半的时间,但是我记得还是比较清楚,当时拒绝的理由是如果让我来回答这个问题,我肯定是首选基于Redis来做。大家想......
  • 复旦大学2024--2025学年第一学期(24级)高等代数I期末考试第七大题解答
    七、(10分) 设$V$是数域$\mathbb{K}$上的$n$维线性空间,$\varphi,\psi$是$V$上的幂等线性变换, 满足$\varphi\psi=\psi$且$\mathrm{Ker}\varphi$是$\psi$-不变子空间.证明:(1)$\mathrm{r}(\psi)\leq\mathrm{r}(\varphi)$;(2)若$\mathrm{r}(\psi)=\mathrm{......
  • 2025年flask大学生扶贫创业平台 程序+论文 可用于计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于大学生扶贫创业的研究,现有文献主要集中在大学生创业的现状、挑战与对策,以及扶贫工作的模式与效果等方面。然而,专门针对大学生扶贫创业......
  • 2025年flask大学生规划平台 程序+论文 可用于计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于大学生规划平台的研究,现有研究主要集中在职业规划、学习管理以及在线教育资源整合等方面。然而,专门针对大学生全面规划平台的研究较少......
  • 2025年flask大学生互联网项目管理信息系统 程序+论文 可用于计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于大学生互联网项目管理信息系统的研究,现有研究主要集中在项目管理理论、信息系统开发以及在线教育平台的建设等方面。然而,专门针对大学......
  • 2025.1.6-3 Linux虚拟机网络配置
    VMware有三种主要的网络配置模式,分别为桥接模式(用的最多)、NAT模式(用的少)和仅主机(基本不用)模式。每种模式都有其特点和适用场景,以下为你详细介绍:1.桥接模式(Bridged)(最重要)原理:在桥接模式下,虚拟机的虚拟网卡会与主机的物理网卡进行桥接,虚拟机就如同局域网中的一台独立物理......
  • 2025首发版,自学AI大模型的正确顺序:最新最全学习路线全解析
    大模型学习路线图第一阶段:基础知识准备在这个阶段,您需要打下坚实的数学基础和编程基础,这是学习任何机器学习和深度学习技术所必需的。前排提示,文末有大模型AGI-CSDN独家资料包哦!1.数学基础线性代数:矩阵运算、向量空间、特征值与特征向量等。概率统计:随机变量、概率分......
  • FMC子卡设计方案:127-4通道 12bit 125Msps 直流耦合 AD FMC 子卡
    4通道 12bit125Msps直流耦合ADFMC子卡一、板卡概述:      FMC 高速 AD 模块 FL9627 为 4 路 125MSPS, 12 位的模拟信号转数字信号模块。 FMC 模块的 AD 转换采用了 2 片 ADI 公司的 AD9627 芯片,每个AD9627 芯片支持 2 路 AD 输入转换,所......