/**装饰者模式*   装饰者模式就是使用被装饰类的一个子类的实例,在客户端将* 这个子类的实例交给装饰类。是集成的替代方案*   优点:使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象* 的功能,并且可以随意地组合这些功能。*   缺点:正因为可以随意组合,所以就可能出现一些不合理地逻辑*///首先创建手机类接口
package july.star.decorate;
/*** Phone* 创建手机类接口* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午8:59:36* @version 1.0*/
public interface Phone {//每个手机都有打电话的功能public void call();
}//实现其接口
package july.star.decorate;/*** IPhone* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午9:01:17* @version 1.0*/
public class IPhone implements Phone{@Overridepublic void call() {System.out.println("手机可以打电话了!");}
}//创建抽象的手机抽象类
package july.star.decorate;
/*** PhoneDecotate* 创建抽象的手机装饰类* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午9:03:29* @version 1.0*/
public abstract class PhoneDecorate implements Phone{private Phone p;public PhoneDecorate(Phone p){this.p = p;}@Overridepublic void call() {p.call();}
}//给手机装饰彩铃功能
package july.star.decorate;/*** RingPhoneDecorate* 给手机装饰彩铃功能* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午9:26:02* @version 1.0*/
public class RingPhoneDecorate extends PhoneDecorate{public RingPhoneDecorate(Phone p) {super(p);}@Overridepublic void call() {System.out.println("手机可以听彩铃");super.call();}
}//给手机添加播放视频功能
package july.star.decorate;/*** MusicPhoneDecorate* 给手机添加播放视频功能* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午9:29:04* @version 1.0*/
public class PlayPhoneDecorate extends PhoneDecorate{public PlayPhoneDecorate(Phone p) {super(p);}@Overridepublic void call() {super.call();System.out.println("手机可以播放视频了");}
}//测试
package july.star.decorate;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
/*** PhoneDemo* 装饰者模式*   装饰者模式就是使用被装饰类的一个子类的实例,在客户端将* 这个子类的实例交给装饰类。是集成的替代方案*   优点:使用装饰模式,可以提供比继承更灵活的扩展对象的功能,它可以动态的添加对象* 的功能,并且可以随意地组合这些功能。*   缺点:正因为可以随意组合,所以就可能出现一些不合理地逻辑* @author MoXingJian* @email 939697374@qq.com* @date 2016年12月11日 下午9:06:30* @version 1.0*/
public class PhoneDemo {public static void main(String[] args) {Phone p = new IPhone();p.call();System.out.println("-----------------------");// 打电话前听彩铃// 给手机添加彩铃功能RingPhoneDecorate rpd = new RingPhoneDecorate(p);rpd.call();System.out.println("-----------------------");// 打完电话后看视频// 给手机添加播放视频PlayPhoneDecorate pd = new PlayPhoneDecorate(p);pd.call();System.out.println("-----------------------");// 打电话前听彩铃,打完电话后播放视频RingPhoneDecorate r = new RingPhoneDecorate(new PlayPhoneDecorate(p));r.call();System.out.println("-----------------------");// 类似的IO流也是装饰者模式设计InputStream is = System.in; // 字节流// 包装InputStreamReader isr = new InputStreamReader(is); // 字符流,单读取一个// 再包装BufferedReader bis = new BufferedReader(isr);// 可以用一行来表示// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));//又或者是控制台录入//Scanner sc = new Scanner(System.in);}
}

装饰者设计模式,简单代码实现相关推荐

  1. php设计模式简单代码,PHP设计模式(1)工厂模式

    工厂模式 是一种类,它具有为您创建对象的某些方法.您可以使用工厂类创建对象,而不直接使用 new.这样,如果您想要更改是所创建的对象类型,只需更改该工厂即可.使用该工厂的所有代码会自动更改. 比方说我 ...

  2. 设计模式简单代码之Command模式(皇帝圣旨篇)

    作者:一雨田( http://blog.csdn.net/dylgsy/ ).本文欢迎转贴,并请保留此信息 在现实的情况中,有一个实例能非常贴切的描述了Command模式,这就是皇帝和士兵的关系.皇帝 ...

  3. 学习笔记:设计模式-装饰器设计模式(JAVA)

    概念 装饰器设计模式,也叫包装设计模式,他是作为现有类的一个包装,允许向一个现有的对象添加新的功能,同时又不改变其结构. 给对象添加功能,一般两种方式,继承或者组合,将一个类的对象嵌入到另一个对象中, ...

  4. 设计模式-简单总结(不涉及代码,有需要戳)

    引言 在学习设计模式之前,有几点必须要给自己和大家说一下.我真的是一个强迫症很强的人哎,前些天也在整理有关设计模式的代码,你能想象到仅仅是一个单例模式,一个最简单的设计模式我就写了将近十个的Java文 ...

  5. 装饰器设计模式代码套路-咖啡加奶

    装饰器设计模式具体操作: 1.抽象组件:需要装饰的抽象对象(接口或抽象父类) 2.具体组件:需要装饰的对象 3.抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法 4.具体装饰类:被装饰的对象 案 ...

  6. lambda设计模式_使用lambda的装饰器设计模式

    lambda设计模式 随着Java中lambda的出现,我们现在有了一个新工具,可以更好地设计我们的代码. 当然,第一步是使用流,方法引用和Java 8中引入的其他简洁功能. 展望未来,我认为下一步是 ...

  7. 装饰着模式示例_装饰器设计模式示例

    装饰着模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的原 ...

  8. 装饰器设计模式的应用

    嗨,您好! 今天,我将展示装饰设计模式的实际应用. 装饰器设计模式是一种广泛使用的设计模式,同时在运行期间处理图形,树木和动态更改. 如果您正在寻找或尝试进行递归,这也是一个不错的选择. 我喜欢它. ...

  9. 三角形圆形创建与擦除java_设计模式---------------简单工厂模式

    设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...

  10. java设计模式之装饰模式_Java中的装饰器设计模式

    java设计模式之装饰模式 装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模 ...

最新文章

  1. 从一个提问引发到你是怎么看待编程语言是一种工具这句话的?【笔记自用】
  2. 队列化栈栈化队列(力扣)
  3. 【MySQL】mysql 远程连接111
  4. 以后开药的时候,最后一定问一句,哪些药有激素
  5. [网络安全自学篇] 十六.Python攻防之弱口令、自定义字典生成及网站防护
  6. 20145318赵一《网络对抗》后门原理与实践
  7. 全网最细之static关键字讲解
  8. Hadoop Flume
  9. Java实现本地缓存、分布式缓存及多级缓存
  10. CompoundButton
  11. 国家知识产权局 下载专利全文
  12. Python用户画像词云图生成并集成到django网站
  13. 程序员的十楼层,看看自己在第几层
  14. Docker容器Exited(137)解决方案
  15. 驱动开发:断链隐藏驱动程序自身
  16. webrtc视频引擎之video_render(视频渲染)介绍
  17. java进阶--深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)
  18. python 制作二维码
  19. 若依框架添加静态页面,路由配置
  20. 将knif4j快速集成到springboot项目中

热门文章

  1. (chap6 Http首部) 其他首部字段
  2. 深度学习的数学(2)恶魔神经
  3. python—操作MySQL增加数据
  4. 4.11-固件映像包 (FIP)
  5. Android fingerprint指纹/face人脸代码导读
  6. 密码学基础知识(三)古典密码
  7. angr学习笔记(11)(SimProcedure)
  8. 9.Windows线程切换_TSS
  9. 从指定URL中提取文件名
  10. CSS之Background-size:cover