iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java装饰者模式的示例分析
  • 827
分享到

Java装饰者模式的示例分析

2023-06-29 08:06:53 827人浏览 八月长安
摘要

小编给大家分享一下Java装饰者模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!定义装饰者模式:在不改变原有对象的基础之上,动态的将功能附加到对象上,

小编给大家分享一下Java装饰者模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    定义

    装饰者模式:在不改变原有对象的基础之上,动态的将功能附加到对象上,提供了继承更有弹性的替代方案,也体现了开闭原则

    案例

    需求

    一个人去咖啡店点了一杯卡布奇诺,加了一份热牛奶

    方案

    定义咖啡基类

    public abstract class Coffee {    private String desc;    private float price;    public abstract float cost();    public String getDesc() {        return desc;    }    public void setDesc(String desc) {        this.desc = desc;    }    public float getPrice() {        return price;    }    public void setPrice(float price) {        this.price = price;    }}

    定义卡布奇诺咖啡类,继承咖啡基类

    public class Cappuccino extends Coffee{    public Cappuccino(){        setDesc("点了一杯卡布奇诺");        setPrice(100);    }    @Override    public float cost() {        System.out.println("当前价格为:" + super.getPrice());        return super.getPrice();    }}

    定义装饰者类

    public class Decorator extends Coffee{    private Coffee coffee;    public Decorator(Coffee coffee){        this.coffee = coffee;    }    @Override    public float cost() {        return super.getPrice() + this.coffee.cost();    }    @Override    public String getDesc() {        return super.getDesc() + coffee.cost();    }}

    定义热牛奶类

    public class HotMilk extends Decorator {    public HotMilk(Coffee coffee){        super(coffee);        setPrice(200);        setDesc("点了一杯热牛奶");    }}

    定义测试

    public class Test {    public static void main(String[] args) {        // 点了一杯卡布奇诺,还加了一份热牛奶        Coffee coffee = new Cappuccino();        System.out.println(coffee.getDesc());        //System.out.println(coffee.getPrice());        System.out.println(coffee.cost());;        HotMilk hotMilk = new HotMilk(coffee);        System.out.println(hotMilk.getDesc());        //System.out.println(hotMilk.getPrice());        System.out.println(hotMilk.cost());    }}

    查看测试结果

    Java装饰者模式的示例分析

    分析

    装饰者模式的目的也是为了扩展对象的功能,是继承的一个替代模式,可以动态的扩展一个实现类的功能,装饰类和被装饰类可以相互独立,不会耦合,灵活方便。

    使用场景

    • 需要给一个现有类添加职责,但是有不能采用生成子类的方式去扩充的时候,

    • 当需要对于现有的一组基本功能进行组合,会产生非常多的功能的时候

    • 当对象的功能要求可以动态的添加,或者说的动态的撤销

    知识点补充

    装饰模式的定义和特点

    软件开发过程中,有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下,可以动态地扩展其功能。所有这些都可以釆用装饰器模式来实现。

    就像我们做菜,需要用到调料,菜,刀,火等一系列抽象的组件来最终完成一道菜。

    装饰模式的定义:

    指在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)的模式,它属于对象结构型模式。就增加功能来说,装饰模式比生成子类更加灵活。

    特点:

    • 装饰器是继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的给一个对象扩展功能,即插即用

    • 通过使用不用装饰类及这些装饰类的排列组合,可以实现不同效果

    • 装饰器模式完全遵守开闭原则

    缺点

    装饰器模式会增加许多子类,过度使用会增加程序得复杂性。

    装饰模式的结构

    装饰模式的结构一般包含以下几个角色

    抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。

    具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其添加一些职责。

    抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。

    具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。

    以上是“Java装饰者模式的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

    --结束END--

    本文标题: Java装饰者模式的示例分析

    本文链接: https://www.lsjlt.com/news/323505.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Java装饰者模式的示例分析
      小编给大家分享一下Java装饰者模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!定义装饰者模式:在不改变原有对象的基础之上,动态的将功能附加到对象上,...
      99+
      2023-06-29
    • JavaScript中装饰者模式与AOP的示例分析
      这篇文章将为大家详细讲解有关JavaScript中装饰者模式与AOP的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是装饰者模式当我们拍了一张照片准备发朋友圈...
      99+
      2022-10-19
    • Java装饰者模式的示例详解
      目录定义案例需求方案分析使用场景知识点补充定义 装饰者模式:在不改变原有对象的基础之上,动态的将功能附加到对象上,提供了继承更有弹性的替代方案,也体现了开闭原则 案例 需求 一个人去...
      99+
      2022-11-13
    • Java装饰器模式实例分析
      今天小编给大家分享一下Java装饰器模式实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。优点装饰类和被装饰类可以独立发...
      99+
      2023-06-29
    • node.js实现的装饰者模式示例
      本文实例讲述了node.js实现的装饰者模式。分享给大家供大家参考,具体如下: 装饰者模式的实现更强调类的组合而不是通过继承。这样可以增强灵活性。在node.js 中,可以通过call函数实现。call函数...
      99+
      2022-06-04
      示例 模式 node
    • PHP中装饰器模式的示例分析
      这篇文章主要介绍了PHP中装饰器模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Gof类图及解释GoF定义:将一个类的接口转换成客户希望的另外一个接口。Adapt...
      99+
      2023-06-20
    • Java建造者模式的示例分析
      这篇文章主要介绍“Java建造者模式的示例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java建造者模式的示例分析”文章能帮助大家解决问题。定义建造者模式(Builder Pattern),又...
      99+
      2023-06-29
    • JAVA装饰器模式应用实例分析
      本篇内容主要讲解“JAVA装饰器模式应用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA装饰器模式应用实例分析”吧!什么是装饰器模式装饰器(Decorator)模式的定义: 指在不...
      99+
      2023-06-30
    • java实现观察者模式的示例分析
      小编给大家分享一下java实现观察者模式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则...
      99+
      2023-05-30
      java
    • Java设计者模式简单工厂模式的示例分析
      这篇文章主要介绍Java设计者模式简单工厂模式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!简介简单工厂模式 (Simple Factory) 又叫静态工厂方法(Static Factory Method)...
      99+
      2023-05-30
      java
    • Java设计模式中的装饰者模式
      目录模式介绍UML类图装饰者模式案例装饰者模式优点装饰者模式缺点模式介绍 23种设计模式之一,英文叫Decorator Pattern,又叫装饰者模式。装饰模式是在不必改变原类文件和...
      99+
      2022-11-13
    • java设计模式-装饰者模式详解
      目录引例一般解法装饰者模式装饰者解法代码:抽象类装饰者被装饰者客户端测试总结:引例 需求:设现在有单品咖啡:Espresso(意大利浓咖啡)和LongBlack(美式咖啡),调料有M...
      99+
      2022-11-12
    • Java观察者模式实例分析
      这篇文章主要讲解了“Java观察者模式实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java观察者模式实例分析”吧!使用场景观察者模式所做的工作其实就是在解耦,让耦合的双方都依赖于抽...
      99+
      2023-06-27
    • Java建造者模式案例分析
      这篇文章主要讲解了“Java建造者模式案例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java建造者模式案例分析”吧!什么是建造者模式建造者(Builder)模式的定义: 指将一个复杂...
      99+
      2023-06-29
    • Java建造者模式实例分析
      今天小编给大家分享一下Java建造者模式实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。优点建造者独立,易扩展。便于控...
      99+
      2023-06-29
    • Vue2.0中观察者模式的示例分析
      这篇文章主要介绍了Vue2.0中观察者模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.Vue1.0 事件的广播与接收(观察者...
      99+
      2022-10-19
    • Javascript中观察者模式的示例分析
      这篇文章主要为大家展示了“Javascript中观察者模式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Javascript中观察者模式的示例分析”这...
      99+
      2022-10-19
    • java模板模式的示例分析
      这篇文章主要介绍java模板模式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java设计模式-模板模式什么是模板模式?模板模式,顾名思义,就是通过模板拓印的方式。定义模板,就是定义框架、结构、原型。定义一...
      99+
      2023-06-20
    • java单例模式的示例分析
      这篇文章主要介绍了java单例模式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。定义:      &nb...
      99+
      2023-05-30
      java
    • Java设计模式之java装饰者模式详解
      目录介绍角色示例代码星巴克咖啡的例子方案一方案二 :将调料内置到Drink类中方案三:装饰者模式代码演示装饰者模式的简化透明性的要求半透明的装饰模式装饰模式的优点装饰模式的缺点装饰模...
      99+
      2022-11-12
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作