首页 > 其他分享 >设计模式-装饰器模式

设计模式-装饰器模式

时间:2023-10-30 17:03:02浏览次数:20  
标签:doSomething 对象 Component 模式 public 组件 设计模式 装饰



目录

  • 设计模式-装饰器模式
  • 什么是装饰器设计模式?
  • java示例


设计模式-装饰器模式

什么是装饰器设计模式?

装饰器设计模式(Decorator Pattern)是一种结构型设计模式,它允许你通过将对象包装在一个装饰器类中来动态地扩展其功能。装饰器模式能够在不改变原有对象的情况下,通过添加新的装饰器类来增加对象的功能。

在装饰器模式中,有一个抽象组件(Component)接口,定义了被装饰对象和装饰器对象的共同行为。然后有一个具体组件(ConcreteComponent)类,实现了抽象组件接口,并定义了基本的功能。接下来,有一个抽象装饰器(Decorator)类,也实现了抽象组件接口,并持有一个抽象组件对象的引用。最后,有一个具体装饰器(ConcreteDecorator)类,继承自抽象装饰器类,可以在不改变原有对象的情况下,通过添加新的功能来装饰被装饰对象。

装饰器模式的优点包括:

  • 可以动态地扩展对象的功能,而无需修改原有对象。
  • 可以通过组合多个装饰器来实现不同的功能组合。
  • 可以灵活地添加或移除装饰器,以达到不同的功能需求。

装饰器模式常见的应用场景包括:

  • 在不改变原有类的情况下,为类添加新的功能。
  • 需要动态地为对象添加额外的行为。
  • 需要在运行时对对象进行功能扩展。

总之,装饰器模式通过包装对象来实现动态的功能扩展,提供了一种灵活、可扩展的方式来修改对象的行为。

java示例

以下是一个简单的Java示例,演示了如何使用装饰器模式来扩展对象的功能:

首先,我们定义一个抽象组件接口 Component,它包含一个 doSomething() 方法:

public interface Component {
    void doSomething();
}

然后,我们创建一个具体组件类 ConcreteComponent,实现了抽象组件接口:

public class ConcreteComponent implements Component {
    @Override
    public void doSomething() {
        System.out.println("Doing something...");
    }
}

接下来,我们定义一个抽象装饰器类 Decorator,它也实现了抽象组件接口,并持有一个抽象组件对象的引用:

public abstract class Decorator implements Component {
    protected Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void doSomething() {
        component.doSomething();
    }
}

最后,我们创建一个具体装饰器类 ConcreteDecorator,继承自抽象装饰器类,并在 doSomething() 方法中添加额外的功能:

public class ConcreteDecorator extends Decorator {
    public ConcreteDecorator(Component component) {
        super(component);
    }

    @Override
    public void doSomething() {
        super.doSomething();
        System.out.println("Adding extra functionality...");
    }
}

现在,我们可以使用装饰器模式来扩展对象的功能:

public class Main {
    public static void main(String[] args) {
        // 创建一个具体组件对象
        Component component = new ConcreteComponent();

        // 使用具体装饰器来装饰组件对象
        Component decoratedComponent = new ConcreteDecorator(component);

        // 调用装饰后的对象的方法
        decoratedComponent.doSomething();
    }
}

输出结果为:

Doing something...
Adding extra functionality...

这个例子中,我们首先创建了一个具体组件对象 ConcreteComponent,然后使用具体装饰器 ConcreteDecorator 来装饰该组件对象。最后,调用装饰后的对象的 doSomething() 方法,即可在不改变原有对象的情况下,添加额外的功能。


标签:doSomething,对象,Component,模式,public,组件,设计模式,装饰
From: https://blog.51cto.com/onejson/8095465

相关文章

  • Centos8进入单用户模式重置密码方法
    开机出现grubbootloader开机选项菜单时,立即点击键盘任意鍵,bootloader会暂停。按下e,编辑选项菜单,移动上下鍵至linux16核心命令行:加入rd.break。linux16/vmlinuz-3.10.0-123.el7.x86_64root=UUID=449d53d1-84c2-40c0-b05e-d1900591d71brord.lvm.lv=vg_kvm7usb/swapcra......
  • JavaScript 中的单例模式
    单例模式是JavaScript中最流行的设计模式之一。单例模式的优点全球访问点:提供对实例的单点访问,可以轻松管理全球资源。内存效率:该模式确保只有一个实例,这特别节省内存。延迟初始化:仅在需要时才创建实例,从而提高性能这是一种创建模式,可确保类只有一个实例,同时提供对该实例......
  • Redis的四种模式:单机、主从、哨兵、集群简介
    Redis的单机模式单机模式就是安装一个redis,启动起来,业务调用即可。具体安装步骤和启动步骤就不赘述了,单机在很多场景也是有使用的,例如在一个并非必须保证高可用的情况下。单机的优点:部署简单,0成本。成本低,没有备用节点,不需要其他的开支。高性能,单机不需要同步数据,数据......
  • 《软件需求模式》阅读笔记一
    《软件需求模式》阅读笔记与心得体会在阅读《软件需求模式》的前四章节之后,我对软件需求模式有了更深入的理解。这本书以实用为主,详细介绍了如何分析、设计、实现和测试软件需求,对于软件工程师来说,具有很高的参考价值。需求模式是软件开发过程中的重要环节,它描述了需求的类型、......
  • 《软件需求模式》阅读笔记二
    在阅读《软件需求模式》的五到八章节之后,我对软件需求模式的理解更加深入。这些章节详细介绍了需求跟踪、需求验证以及需求变更管理等方面的内容,为我在软件开发过程中提供了宝贵的指导。需求跟踪是确保软件需求得以实现的关键环节。通过阅读这本书,我了解到需求跟踪的主要目的是确......
  • 《软件需求模式》阅读笔记三
    在阅读《软件需求模式》的九到最后一章节后,我对软件需求模式的理解和应用能力得到了进一步提升。这些章节介绍了更多高级的需求模式和应用案例,帮助我更好地掌握需求工程的精髓。在这些章节中,作者详细介绍了如何使用需求模式来解决复杂的软件需求问题。通过分析和归纳各种实际需求......
  • 装饰器模板
    双层装饰器defoutter(func):defwrapper(*args,**kwargs): #wrapper是未来要运行的函数#此处加功能res=func(*args,**kwargs) #func是被装饰的函数returnresreturnwrapper三层装饰器:给双层装饰器加参数的defsanceng():......
  • 模拟实现二叉搜索树(非kv模式)(上)
    本篇博客主要是讲解什么是二叉搜索树,以及模拟实现二叉搜索树的插入节点,中序遍历,查找特定节点,以及删除节点。什么是二叉搜索树首先二叉搜索树肯定是一棵二叉树,对于二叉树我们应该是陌生了。而我们在学习二叉树的时候知道,如果只是一棵普通的二叉树,用来储存数据是没有任何意义的,因为如......
  • 设计模式实验五
    8u软件设计                 石家庄铁道大学信息学院 实验5:建造者模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解建造者模式的动机,掌握该模式的结构;2、能够利用建造者模式解决实际问题。 [实验任务一]:计算机组装使用建造者模式,完......
  • 设计模式实验四
    软件设计                 石家庄铁道大学信息学院 实验4:抽象工厂模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解抽象工厂模式的动机,掌握该模式的结构;2、能够利用抽象工厂模式解决实际问题。 [实验任务一]:人与肤色使用抽象工厂模......