前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之 装饰器模式

设计模式之 装饰器模式

作者头像
tanoak
发布2018-12-06 11:20:35
3680
发布2018-12-06 11:20:35
举报
文章被收录于专栏:java闲聊java闲聊
代码语言:javascript
复制
装饰器模式是为已有功能动态的添加更多功能的一种方式。
  • 优点: 有效的把类的核心职责和装饰功能区分开,职责更细化
  • UML

image.png

  • code public interface Apple { /** * 描述 */ void res(); } public class ConcreteApple implements Apple { @Override public void res() { System.out.println("普通的苹果"); } }
    • 装饰器基类 public abstract class Decorator implements Apple { protected Apple apple; public Decorator(Apple apple) { super(); this.apple = apple; } @Override public void res() { apple.res(); } } public class ConcreteDecoratorA extends Decorator{ public ConcreteDecoratorA(Apple apple) { super(apple); } public void resA(){ System.out.println("被装饰器A扩展的功能"); } @Override public void res(){ System.out.println("装饰器A=>装饰成红色的"); super.res(); System.out.println("装饰器A=>装饰结束"); } } public class ConcreteDecoratorB extends Decorator{ public ConcreteDecoratorB(Apple apple) { super(apple); } public void resB(){ System.out.println("被装饰器B扩展的功能"); } @Override public void res(){ System.out.println("装饰器B=>装饰成绿色的"); super.res(); System.out.println("装饰器B=>装饰结束"); } }
      • 测试 ** * @author tanoak@qq.com * @date 2018/7/26 14:08 * @Desc 装饰器模式 * 1,不改变原类文件。 * 2,不使用继承。 * 3,动态扩展。 */ public class Main { public static void main(String[] args) { Apple apple =new ConcreteApple(); System.out.println("-----------未装饰-------------------\n"); apple.res();//原来的方法 System.out.println("------------------------------------\n"); test2(apple) ; } private static void test2(Apple apple){ ConcreteDecoratorB decoratorB = new ConcreteDecoratorB(apple); System.out.println("\n-----------装饰后-------------------\n"); decoratorB.res(); System.out.println("------------------------------"); } } 总结
        • 使用场景 当系统需要增加新功能时,向旧的类中添加新的代码,装饰原有类的核心职责或主要行为 eg: 在上述代码中 我想要对苹果的颜色进行包装,但是也会存在不进行包装的情况,核心逻辑是苹果,其次是对苹果进行装饰
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.11.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档