java设计模式-装饰者模式

模式定义

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

设计原则

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

UML类图

装饰者模式实例

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

被装饰者-食物类

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

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

    public String make() {
        return foodName;
    }
}

再定义几个装饰者类

装饰者-面包类

/**
 * 装饰者-面包类
 */
public class Bread extends Food {
    private Food food;
    public Bread(Food food) {
        this.food = food;
    }

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

装饰者-奶油类

/**
 * 装饰者-奶油类
 */
public class Cream extends Food {
    private Food food;
    public Cream(Food food) {
        this.food = food;
    }

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

装饰者-蔬菜类

/**
 * 装饰者-蔬菜类
 */
public class Vegetable extends Food {
    private Food food;
    public Vegetable(Food food) {
        this.food = food;
    }

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

测试装饰者模型

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

}

运行结果

香肠+奶油+蔬菜+面包
Process finished with exit code 0

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

java.io中的装饰者模式

总结

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

原文发布于微信公众号 - java工会(javagonghui)

原文发表时间:2018-04-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术

Spring AOP中JDK和CGLib动态代理哪个更快?

昨天一位知识星球的小伙伴面试的时候被问到:Spring AOP中JDK和CGLib动态代理哪个效率更高?在知识星球整理了一下,今天特分享出来,供大家参考!

571
来自专栏Java帮帮-微信公众号-技术文章全总结

【Java提高二】三大特性-继承

【Java提高】三大特性-继承 在《Think in java》中有这样一句话:复用代码是Java众多引人注目的功能之一。但要想成为极具革命性的语言,仅仅能够...

3339
来自专栏java工会

java设计模式-装饰者模式

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

1264
来自专栏java一日一条

Java面试参考指南(一)

Java是一种基于面向对象概念的编程语言,使用高度抽象化来解决现实世界的问题。 面向对象的方法将现实世界中的对象进行概念化,以便于在应用之间进行重用。例如...

963
来自专栏斑斓

作为Scala语法糖的设计模式

Scala算是一门博采众家之长的语言,兼具OO与FP的特性,若使用恰当,可以更好地将OO与FP的各自优势发挥到极致;然而问题也随之而来,倘若过分地夸大OO特性,...

3235
来自专栏Java面试通关手册

深入理解工厂模式

Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_G...

21013
来自专栏微信公众号:Java团长

Java基础10 接口的继承与抽象类

在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体。interface为类提供了接口规范。

762
来自专栏小樱的经验随笔

【Java学习笔记之十三】初探Java面向对象的过程及代码实现

理解Java面向对象的重要知识点: 一、 类,对象 类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的、红色的、白色的... ...

3146
来自专栏java学习

面试题22(关于static用法)

关于下面的程序Test.java说法正确的是? public class Test { static String x="1"; staticint y=1; ...

2635
来自专栏Danny的专栏

设计模式奠基石——UML关系转化为代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

963

扫码关注云+社区