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

设计模式-装饰者模式

作者头像
武培轩
发布2018-04-18 17:10:46
5360
发布2018-04-18 17:10:46
举报
文章被收录于专栏:武培轩的专栏武培轩的专栏

模式定义

动态的将新功能附加到对象上,在对象功能扩展方面,它比继承更有弹性。

设计原则

  1. 多用组合,少用继承
  2. 类应设计的对扩展开放,对修改关闭。

UML类图

image
image

装饰者模式实例

先写一个被装饰者食物的类

被装饰者-食物类

代码语言:javascript
复制
package com.wpx.decorator;

/**
 * 被装饰者-食物类
 */
public class Food {
    private String foodName;

    public Food() {

    }

    public Food(String foodName) {
        this.foodName = foodName;
    }

    public String make() {
        return foodName;
    }
}

再定义几个装饰者类

装饰者-面包类

代码语言:javascript
复制
package com.wpx.decorator;

/**
 * 装饰者-面包类
 */
public class Bread extends Food {
    private Food food;

    public Bread(Food food){
        this.food=food;
    }

    public String make(){
        return food.make()+"+面包";
    }
}

装饰者-奶油类

代码语言:javascript
复制
package com.wpx.decorator;

/**
 * 装饰者-奶油类
 */
public class Cream extends Food {
    private Food food;

    public Cream(Food food) {
        this.food = food;
    }

    public String make() {
        return food.make() + "+奶油";
    }
}

装饰者-蔬菜类

代码语言:javascript
复制
package com.wpx.decorator;

/**
 * 装饰者-蔬菜类
 */
public class Vegetable extends Food {
    private Food food;

    public Vegetable(Food food) {
        this.food = food;
    }

    public String make() {
        return food.make() + "+蔬菜";
    }
}

测试装饰者模型

代码语言:javascript
复制
package com.wpx.decorator;

public class DecoratorDemo {
    public static void main(String[] args) {
        Food food = new Bread(new Vegetable(new Cream(new Food("香肠"))));
        System.out.println(food.make());
    }

}

运行结果

代码语言:javascript
复制
香肠+奶油+蔬菜+面包

Process finished with exit code 0

这就相当于生活当中制作三明治的过程,我们先加一根香肠,再香肠上抹上一层奶油,再加上几片蔬菜,最后拿面包夹上。

java.io中的装饰者模式

image
image

总结

装饰者模型就是动态地添加更多功能的一种方式,是一种组合和委托的思想,但是会导致设计中出现许多小类,如果过度使用,会让程序变得很复杂,难以看明白。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模式定义
  • 设计原则
  • UML类图
  • 装饰者模式实例
  • java.io中的装饰者模式
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档