Java/C++实现装饰模式---模拟手机功能的升级过程
2024-09-04 20:50:55
用装饰模式模拟手机功能的升级过程:简单的手机(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;
}
运行结果:
最新文章
- Git安装与配置
- ubuntu系统中的VMware 安装win7 Ghost镜像的几个坑
- C++中 :: 的意思
- Socket 之 同步以及异步通信
- 读取Excel异常定义了过多字段的解决方法
- c++ RTTI(runtime type info)
- 一个必用的javascript框架:underscore.js - wine的思考 - ITeye技术网站
- 低压电力采集平台DW710C与PC沟通
- C# 语言规范_版本5.0 (第7章 表达式)
- 支付宝WAP支付接口开发
- python-冒泡排序与插入排序
- Bandit Wargame Level12 Writeup
- GetPathFromUri4kitkat【Android 4.4 kitkat以上及以下根据uri获取路径的方法】
- angular.identity()
- 《Java大学教程》—第11章 案例研究--第1部分
- 微信小程序本地引用iconfont(阿里巴巴矢量图标库)
- Tarjan&;&;缩点简析
- [翻译]:Artificial Intelligence for games 5.3 STATE MACHINES:状态机
- 502 解决:[WARNING] fpm_children_bury
- HeidiSQL数据库mysql/sql-server连接工具