软件设计-Tutorial11
[实验任务一]:手机功能的升级
用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而JarPhone除了声音还能振动;更高级的手机(ComplexPhone)除了声音、振动外,还有灯光闪烁提示。
类图:
```mermaid classDiagram class Phone { <<interface>> +receiveCall() } class SimplePhone { +receiveCall() } class PhoneDecorator { <<abstract>> #phone: Phone +PhoneDecorator(phone: Phone) +receiveCall() } class JarPhone { +JarPhone(phone: Phone) +receiveCall() } class ComplexPhone { +ComplexPhone(phone: Phone) +receiveCall() } class PhoneTest { +main(args: String[]) } Phone <|.. SimplePhone : implements Phone <|.. PhoneDecorator : implements PhoneDecorator <|-- JarPhone : extends PhoneDecorator <|-- ComplexPhone : extends PhoneDecorator o-- Phone : has PhoneTest ..> Phone : uses PhoneTest ..> SimplePhone : uses PhoneTest ..> JarPhone : uses PhoneTest ..> ComplexPhone : uses ```
package Tutorial11; public interface Phone { void receiveCall(); // 接收来电 }
package Tutorial11; abstract public class PhoneDecorator implements Phone{ protected Phone phone; // 被装饰的手机 public PhoneDecorator(Phone phone) { this.phone = phone; } @Override public void receiveCall() { phone.receiveCall(); // 调用被装饰对象的功能 } }
package Tutorial11; public class SimplePhone implements Phone{ @Override public void receiveCall() { System.out.println("手机响铃:来电提醒!"); } }
package Tutorial11; public class JarPhone extends PhoneDecorator{ public JarPhone(Phone phone) { super(phone); } @Override public void receiveCall() { super.receiveCall(); // 调用父类的功能(响铃) System.out.println("手机震动:振动提醒!"); } }
package Tutorial11; public class ComplexPhone extends PhoneDecorator{ public ComplexPhone(Phone phone) { super(phone); } @Override public void receiveCall() { super.receiveCall(); // 调用父类的功能(响铃和振动) System.out.println("手机闪光:灯光闪烁提醒!"); } }
package Tutorial11; public class PhoneTest { public static void main(String[] args) { // 创建基础手机(SimplePhone) Phone simplePhone = new SimplePhone(); simplePhone.receiveCall(); // 只有响铃提醒 System.out.println("---------- 升级为JarPhone ----------"); // 创建升级后的手机(JarPhone,具有响铃和振动功能) Phone jarPhone = new JarPhone(simplePhone); jarPhone.receiveCall(); // 响铃 + 振动提醒 System.out.println("---------- 升级为ComplexPhone ----------"); // 创建最终版本的手机(ComplexPhone,具有响铃、振动和闪光功能) Phone complexPhone = new ComplexPhone(jarPhone); complexPhone.receiveCall(); // 响铃 + 振动 + 闪光提醒 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2023-11-06 3.增删改查的实现(1)