装饰器模式(结构性)

这篇具有很好参考价值的文章主要介绍了装饰器模式(结构性)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

装饰器模式:动态的给对象添加新的功能。
主要有以下几种角色:
ConcreteCompnent(具体构件):作为需要被装饰的类,在具体构件中只需要实现最基础的业务逻辑即可;
Decorator(抽象装饰器):抽象装饰器维护了一个指向抽象构件对象的引用(子类通过构造器等方法明确使用何种具体构件),即通过组合方式将装饰者和被装饰者建立起一个相比继承关系更为宽松的联系。同时作为抽象构件的子类,抽象装饰器还给具体构件增加了额外的职责,其额外的职责在抽象装饰器的子类中得到实现;
ConcreteDecorator(具体装饰器):作为抽象装饰器的子类,具体装饰器实现了需要给具体构件添加的额外职责;
Component(抽象构件):需要被装饰类的基类,同时也是装饰者的基类,在这个基类中声明了需要实现的业务方法
1、优点
(1)装饰类和被装饰类可以独立发展,而不会相互耦合。换句话说,Component类无需知道Decorator类,Decorator类是从外部来扩展Component类的功能,而Decorator也不用知道具体的构件。

(2)装饰器模式是继承关系的一个替代方案。我们看装饰类Decorator,不管装饰多少层,返回的对象还是Component(因为Decorator本身就是继承自Component的),实现的还是is-a的关系。

2、缺点
(1)装饰器模式虽然减少了类的爆炸,但是在使用的时候,你就可能需要更多的对象来表示继承关系中的一个对象

(2)装饰器模式虽然从数量级上减少了类的数量,但是为了要装饰,仍旧会增加很多的小类这些具体的装饰类的逻辑将不会非常的清晰,不够直观,容易令人迷惑。
示例
Component(抽象构件):

public interface Product {
    void fuction();
}

ConcreteCompnent(具体构件):

public class Phone implements Product{
    @Override
    public void fuction() {
        System.out.println("手机能拍照");
    }
}

Decorator(抽象装饰器):

public abstract class PhoneDecorator implements Product {

    private Product product;

    public PhoneDecorator(Product product) {
        this.product = product;
    }

    @Override
    public void fuction() {
        this.product.fuction();
    }
}

ConcreteDecorator(具体装饰器):

public class PhoneDecoratorInfo extends PhoneDecorator{

    public PhoneDecoratorInfo(Product product) {
        super(product);
    }

    @Override
    public void fuction() {
        super.fuction();
        System.out.println("添加短信功能");
    }


}
public class PhoneDecoratorInfo1 extends PhoneDecorator{
    public PhoneDecoratorInfo1(Product product) {
        super(product);
    }

    @Override
    public void fuction() {
        super.fuction();
        System.out.println("添加一个打电话功能");
    }
}

测试:

public class Test {

    public static void main(String[] args) {
        Product product=new Phone();
        PhoneDecoratorInfo phoneDecoratorInfo = new PhoneDecoratorInfo(product);
        PhoneDecoratorInfo phoneDecoratorInfo1=new PhoneDecoratorInfo(new PhoneDecoratorInfo1(new PhoneDecoratorInfo1(phoneDecoratorInfo)));
        phoneDecoratorInfo1.fuction();

    }
}

结果:
装饰器模式(结构性)文章来源地址https://www.toymoban.com/news/detail-408252.html

到了这里,关于装饰器模式(结构性)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 12、【装饰器模式】动态地为对象添加新功能

    12、【装饰器模式】动态地为对象添加新功能

    你好,我是程序员雪球。 今天我们来聊聊 23 种设计模式中,一种常见的结构型模式,装饰器模式。聊聊它的设计思想、实现原理,应用场景,以及如何使用。     装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在不改变原始类的基础上,动态地为对象添加新的

    2024年04月29日
    浏览(8)
  • 算法分析与设计-会场安排问题(贪心)(通俗易懂,附源码和图解,含贪心选择性质和最优子结构性质的证明)(c++)

    算法分析与设计-会场安排问题(贪心)(通俗易懂,附源码和图解,含贪心选择性质和最优子结构性质的证明)(c++)

    (一)题目 问题描述 假设在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排。(这个问题实际上是著名的图着色问题。若将每个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点有着不同颜色的最小着色数,相当于

    2024年02月07日
    浏览(56)
  • 装饰器模式:让你的对象变得更强大

    在日常开发中,当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时。例如,该类被隐藏或者该类是终极类或者采用继承方式会产生大量的子类。这时候,我们该怎么办呢?我们可以使用装饰器器模式来解决这个问题, 本文将从以下四个方面讲解装饰

    2024年02月10日
    浏览(16)
  • 篇八:装饰器模式:动态增加功能

    篇八: “装饰器模式:动态增加功能” 开始本篇文章之前先推荐一个好用的学习工具,AIRIght,借助于AI助手工具,学习事半功倍。欢迎访问:http://airight.fun/。 另外有2本不错的关于设计模式的资料,分享出来与大家学习参考。 链接:https://pan.baidu.com/s/1RmhQF_o1CdK8U7s5KeILog?pwd

    2024年02月14日
    浏览(9)
  • 设计思想培养:装饰者模式下的RecyclerView添加头、尾

    设计思想培养:装饰者模式下的RecyclerView添加头、尾

    一个高复用、低耦合的代码不会让你在第一次去实现代码的时候感到舒服 但是他会在你后面做扩展、和同类需求的时候,直呼真香!!! 最近写需求,借用到装饰者思想做了RecyclerView的头和尾的扩展 感觉很不错,赶紧拿出来说一说,嘻嘻 ps:本篇文章只是帮助大家,在实现

    2024年02月06日
    浏览(11)
  • 结构型模式-装饰者模式

    结构型模式-装饰者模式

    概述 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算总价就会显得比较麻烦。 使用继承的方式存在的问题: 扩展性不好 如果要再加一种配料(火

    2024年02月01日
    浏览(20)
  • 【结构型模式】装饰者模式

    【结构型模式】装饰者模式

    装饰模式 — Graphic Design Patterns 设计模式 | 装饰者模式及典型应用 黑马程序员Java设计模式详解-装饰者模式概述 装饰者模式 ( Decorator )是一种结构型设计模式,它允许你在 不改变 对象自身的基础上, 动态 地给一个对象 添加额外的功能 。该模式是通过创建一个包装对象来实

    2023年04月15日
    浏览(14)
  • 设计模式【结构型】-- 装饰者模式

    设计模式【结构型】-- 装饰者模式

    装饰者模式是一种 结构型设计模式 ,它允许你动态地将新功能添加到对象中,通过将对象放入包含这些功能的特殊包装器对象中。这样一来,你可以在运行时通过组合不同的对象来扩展功能,而不是通过继承修改代码。 大白话 : 装饰模式,是指在不改变原有对象的基础上

    2024年02月16日
    浏览(18)
  • 第八章结构型模式—装饰者模式

    第八章结构型模式—装饰者模式

    结构型模式描述如何将类或对象按某种布局组成更大的结构,有以下两种: 类结构型模式 :采用继承机制来组织接口和类。 对象结构型模式 :釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低,满足 “合成复用原则”,所以对象结构型模式比类结

    2024年02月05日
    浏览(10)
  • 笨蛋学设计模式结构型模式-装饰者模式【9】

    7.3.1概念 ​ 装饰者模式通过在一个现有对象中,能动态的给该对象添加新的功能,同时不改变对象本身的结构,是继承的一种替代方案,可以实现在不定义子类的情况下,运行时动态地扩展对象的行为(给对象添加一些额外的功能),而无需修改原有代码。 7.3.2场景 ​ 当我们

    2024年01月17日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包