设计模式——装饰模式

本文通过装饰模式展示了如何逐步增加手机的功能,如从SimplePhone到可以振动的JarPhone,再到高级的ComplexPhone,增加了声音、振动和灯光闪烁提示。通过类图和代码实现详细描述了这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:简单的手机(SimplePhone)在接收到来电的时候,会发出声音来提醒主人,而现在手机添加一项功能,在接收来电的时候,除了有声音还能产生振动(JarPhone);还可以得到更加高级的手机(ComplexPhone),来电时它不仅能够发声,产生振动,而且有灯光闪烁提示。现用装饰模式来模拟手机功能的升级过程,要求绘制类图并编程模拟实现。
类图:
在这里插入图片描述
代码部分:
1、

package simplePhone;
/**
 * 抽象手机构件类:抽象构件类
 * @author 9986
 *
 */
public abstract class Phone {
	public abstract void voice();
}

2、

package simplePhone;
/**
 * 简单手机类:具体构件类
 * @author 9986
 *
 */
public class SimplePhone extends Phone{

	public SimplePhone() {
		System.out.println("这是一部简单手机");
	}
	
	@Override
	public void voice() {
		System.out.println("手机来电声音");
	}

}

3、

package simplePhone;
/**
 * 构件装饰类:抽象装饰类
 * @author 9986
 *
 */
public class Changer extends Phone{
	private Phone phone;
	public Changer(Phone phone) {
		this.phone=phone;
	}
	
	@Override
	public void voice() {
		phone.voice();
	}

}

4、

package simplePhone;
/**
 * Complex手机类:具体装饰类
 * @author 9986
 *
 */
public class ComplexPhone extends Changer{

	public ComplexPhone(Phone phone) {
		super(phone);
		System.out.println("变成高级手机");
		flash();
	}
	
	public void flash() {
		System.out.println("手机来电闪烁灯光提示");
	}

}

5、

package simplePhone;
/**
 * Jar手机类:具体装饰类
 * @author 9986
 *
 */
public final class JarPhone extends Changer{

	public JarPhone(Phone phone) {
		super(phone);
		System.out.println("手机增加震动功能");
	}

	public void voice() {
		super.voice();
		System.out.println("来电震动");
	}
}

6、

package simplePhone;
/**
 * 客户端测试类
 * @author 9986
 *
 */
public class Client {
	public static void main(String[] args) {
		//父类调用子类方法
		Phone p1=new SimplePhone();
		p1.voice();
		System.out.println("====================");
		Phone p2=new JarPhone(p1);
		p2.voice();
		System.out.println("====================");
		Phone p3=new ComplexPhone(p2);
		p3.voice();
	}
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值