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

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;
}
运行结果:


Java/C++实现装饰模式---模拟手机功能的升级过程的更多相关文章
- chrome模拟手机功能
在搭建好web側环境之后.能够使用chrome来模拟手机的功能 直接上图吧: 图1是直接模拟一个通用的界面 图2里面能够选择不同的手机型号,还是比較全的! 选择一个查看一下,和手机是一样的效果,非常赞 ...
- 在PC上测试移动端网站和模拟手机浏览器的5大方
查了很多资料,尝试了大部分方法,下面将这一天的努力总结下分享给大家,也让大家免去看那么多文章,以下介绍的方法,都是本人亲自测试成功的方法,测试环境winxp. 一.Chrome*浏览器 chrome模 ...
- 在PC上测试移动端网站和模拟手机浏览器的5大方法
在PC上测试移动端网站和模拟手机浏览器的5大方法 来源:互联网 作者:佚名 时间:03-19 10:14:54 [大 中 小] 最近公司要开发网站的移动版,让我准备准备知 ...
- 【转】在PC上测试移动端网站和模拟手机浏览器的5大方法
查了很多资料,尝试了大部分方法,下面将这一天的努力总结下分享给大家,也让大家免去看那么多文章,以下介绍的方法,都是本人亲自测试成功的方法,测试环境winxp. 一.Chrome*浏览器 chrome模 ...
- PC上测试移动端网站和模拟手机浏览器
一.Chrome*浏览器 chrome模拟手机总共有四种方法,原理都一样,通过伪装User-Agent,将浏览器模拟成Android设备.以下标星的为推荐方法. 1.新建Chrome快捷方式 右击桌面 ...
- JS 模拟手机页面文件的下拉刷新
js 模拟手机页面文件的下拉刷新初探 老总说需要这个功能,好吧那就看看相关的东西呗 最后弄出了一个简单的下拉刷新页面的形式,还不算太复杂 查看 demo 要在仿真器下才能看到效果,比如chrome的里 ...
- javamail模拟邮箱功能发送电子邮件-基础实战篇(javamail API电子邮件实例)
引言: JavaMail 是一种可选的.能用于读取.编写和发送电子消息的包 JavaMail jar包下载地址:http://java.sun.com/products/javamail/downlo ...
- javamail模拟邮箱功能发送电子邮件-中级实战篇【新增附件发送方法】(javamail API电子邮件实例)
引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
- javamail模拟邮箱功能--邮件删除-中级实战篇【邮件标记方法】(javamail API电子邮件实例)
前言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 本章可能是讲解javamail的最后一 ...
随机推荐
- 【python】pip安装库时出现Read timed out.解决办法
昨天第一次用python画圆,当时并没有安装numpy库(导入数据包)和matplotlib库(导入图形包),于是尝试用pip安装库 首先,我先更新了pip,如下图: 顺便附上成功截图: 然后安装nu ...
- 写给开发人员的实用密码学(三)—— MAC 与密钥派生函数 KDF
目录 一.MAC 消息认证码 MAC 与哈希函数.数字签名的区别 MAC 的应用 1. 验证消息的真实性.完整性 2. AE 认证加密 - Authenticated encryption 3. 基于 ...
- 华为交换机配置ACL详细步骤
ACL 介绍 #2000-2999普通ACL,根据源IP过滤 #3000-3999高级ACL,根据源目的端口和源目的地址等过滤 #4000-4999二层ACL,根据源目的MAC等过滤 配置举例: 拒绝 ...
- Linux——vi命令详解
转载 Linux--vi命令详解 原文链接:https://blog.csdn.net/cyl101816/article/details/82026678 vi编辑器是所有Unix及Linux系 ...
- 拉普拉斯特征映射(Laplacian Eigenmaps)
1 介绍 拉普拉斯特征映射(Laplacian Eigenmaps)是一种不太常见的降维算法,它看问题的角度和常见的降维算法不太相同,是从局部的角度去构建数据之间的关系.也许这样讲有些抽象,具体来讲, ...
- docker-compose.yml 版本问题
Docker Engine 与docker-compose version 之间的有以下关系: Compose file format Docker Engine 1 1.9.0+ 2.0 1.10. ...
- JavaWeb——Tomcat使用
官方下载地址:https://tomcat.apache.org/download-90.cgi 选择安装包: 64-bit Windows zip (pgp, sha512) 注:tar.gz后缀的 ...
- Centos7下开启防火墙,允许通过的端口
1.查看防火墙状态 systemctl status firewalld 2.如果不是显示active状态,需要打开防火墙 systemctl start firewalld 3.# 查看所有已开放的 ...
- phpmyadmin 4.8.1 文件包含漏
一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 3.点击新建项目按钮,弹出对画框中选择(C:\ ...
- 亚马逊云储存器S3 BCUKET安全性学习笔记
亚马逊云储存器S3 BCUKET安全性学习笔记 Bugs_Bunny CTF – Walk walk CTF 昨天玩了会这个比赛,碰到这题是知识盲点,来记录一下. 先从题目看起吧. http://ww ...