题目:简单的手机(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("这是一部简单手机");}@Overridepublic 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;}@Overridepublic 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();}
}

运行结果:

设计模式——装饰模式相关推荐

  1. 设计模式----装饰模式

    设计模式--装饰模式 "装饰模式(Decorator)"又名"包装模式(Wrapper)",通常用来灵活地扩充对象的功能. 在此之前我们可以通过类的继承来扩充父 ...

  2. 大话设计模式-装饰模式(大鸟和小菜Java版)

    装饰模式:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.(百度百科) 这个模式让后期的修改变得极为简单,真的就高内 ...

  3. 大话设计模式—装饰模式

    装饰模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装原 ...

  4. 设计模式--装饰模式

    目录 什么是装饰模式? 应用代码示例 装饰模式模板 jdk中的装饰模式 为什么装饰器类不能直接实现Component父类? 什么是装饰模式? 以生活中的场景来举例,一个蛋糕胚,给它涂上奶油就变成了奶油 ...

  5. C++设计模式-装饰模式

    目录 基本概念 代码和实例 基本概念 装饰模式是为已有功能动态地添加更多功能的一种方式. 当系统需要新功能的时候,是向旧系统的类中添加新代码.这些新代码通常装饰了原有类的核心职责或主要行为. 装饰模式 ...

  6. 李建忠设计模式——装饰模式

    1."单一职责"模式 在软件组件的设计中,如果责任划分不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任. 典型模式 Deco ...

  7. C++设计模式——装饰模式(高屋建瓴)

    原网址:https://blog.csdn.net/CoderAldrich/article/details/83115394 重点在于 ConcreteDecoratorA(Component *d ...

  8. java设计模式——装饰模式

    装饰模式也称为包装模式.结构型设计模式之一,其使用一种对客户端透明的方式动态的扩展对象的功能,同时它也是继承关系的一种替代方案之一. 装饰模式可以动态的给一个对象添加一些额外的职责.就增加功能功能来说 ...

  9. 设计模式——装饰模式详解

    0. 前言   写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇 ...

  10. 设计模式 | 装饰模式

    1 | 装饰模式的概述 我们在了解装饰模式之前,先回顾下生活中的几个常见现象,举例如下: 新房的装修,房屋装修并没有改变房屋居住的本质,但可以让房屋变得更漂亮,更温馨,更实用,更满足居家需求. 相片的 ...

最新文章

  1. pandas读取文件
  2. 'python program'.count('p')的值是_如何用Python分析泰坦尼克号生还率?
  3. python简易版成绩管理系统_Python 实现简易版成绩管理系统
  4. AC日记——【模板】最小费用最大流 P3381
  5. php 查询数据库返回json数据
  6. JDBC连接数据库格式
  7. Team Foundation Server 2010 安装、部署与配置(三):安装 .
  8. TensorFlow中查看checkpoint文件中的变量名和对应值
  9. 【转】单元测试基础知识
  10. 双卡项目如何在状态栏显示或隐藏G,3G以及卡1和卡2的信号标识
  11. mysql数据库的服务无法启动,mysql服务无法启动,服务没有报告任何错误
  12. linux path原理,面试题:Linux中的环境变量PATH
  13. 图像处理之调整亮度与饱和度
  14. aac解码器之郁闷(二)
  15. Java自定义组合控件
  16. 【词汇】BOSS系统
  17. Android 30. 广播-Broadcast(一)
  18. 单反镜头上的参数具体意义
  19. svn禁止访问“/svn/project/!svn/act解决办法
  20. vue+iview 内网预览(本文重点)+外网预览word、excel、pdf、ppt

热门文章

  1. ORA-01555: snapshot too old: rollback segment number with name too smal
  2. Android DecorView浅析
  3. Html使用(1)(摘抄自慕课)
  4. 小学生计算机课如何上,如何上好一堂小学信息技术课
  5. httprunner 2.x学习1-环境与登录接口案例
  6. Seek the Name, Seek the Fame(KMP-next数组详解)
  7. Spring生命周期详解 + 应用实例
  8. 关于Hadoop基础理论
  9. 洛谷—— P1775 古代人的难题_NOI导刊2010提高(02)
  10. pythonpath 详解