美文网首页
Java 装饰模式

Java 装饰模式

作者: CodeDuan | 来源:发表于2022-02-08 16:51 被阅读0次

一、定义

在不必改变原类文件和原类使用的继承的情况下,动态地扩展一个对象的功能。
它是通过创建一个包装对象,也就是用装饰来包裹真实的对象来实现。

主要角色:

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

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

抽象装饰:继承或实现抽象构建,并包含具体构建的实例,可以通过其子类扩展具体构件的功能。

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

二、代码实现

举例:比如有一条狗,只会吃饭睡觉,不会看门,此时可以通过装饰器模式为这条狗附加看门的功能。

抽象构件:

public interface Dog {
    void function();
}

具体构件:

public class DogImpl implements Dog {
    @Override
    public void function() {
        System.out.println("狗:吃饭和睡觉");
    }
}

先来看看未使用装饰器的用法:

    public static void main(String[] args) {
        Dog dog = new DogImpl();
        dog.function();
    }
    
    输出:
    狗:吃饭和睡觉

接下来使用装饰器模式:

抽象装饰:

public class Decorator implements Dog{

    private Dog dog;

    public Decorator(Dog dog){
        this.dog = dog;
    }

    @Override
    public void function() {
        dog.function();
    }
}

具体装饰:

public class DogDecorator extends Decorator{
    public DogDecorator(Dog dog) {
        super(dog);
    }

    @Override
    public void function() {
        super.function();
        System.out.println("狗:看门护院");//附加功能
    }
}

使用:

    public static void main(String[] args) {
        System.out.println("=====装饰前========");
        Dog dog = new DogImpl();
        dog.function();
        System.out.println("=====装饰后========");
        Dog dog2 = new DogDecorator(dog);
        dog2.function();
    }

    输出:
    =====装饰前========
    狗:吃饭和睡觉
    =====装饰后========
    狗:吃饭和睡觉
    狗:看门护院

一般情况下我们扩展一个类的时候通常是通过继承的方式来实现,随着扩展的功能的增多,子类也会越来越多,此时我们就可以应用装饰器模式,通过一个装饰类来包装原有的类,并保持原有类不发生改变的情况下,提供了额外的功能。

相关文章

  • 让你再也忘不了IO相关知识-Java IO图文详解

    1 装饰模式 Java中IO使用的是装饰模式,装饰模式在Android中很常见,比如系统的Context。 装饰模...

  • 装饰者模式

    在《JAVA与模式》一书开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装模式。装饰模式以对客户端...

  • 设计模式之装饰器模式

    在阎宏博士的《JAVA与模式》的书中,对装饰器模式的描述如下:装饰模式又名包装(Wrapper)模式。装饰模式以对...

  • java IO 的知识总结

    装饰者模式 因为java的IO是基于装饰者模式设计的,所以要了解掌握IO 必须要先清楚什么事装饰者模式(装饰者模式...

  • 装饰者模式——IO流运用

    推荐博客Java设计模式学习09Java设计模式学习09Java设计模式学习09 装饰者模式还是比较难懂的。。。。...

  • 设计模式 | 装饰者模式及典型应用

    前言 本文的主要内容: 介绍装饰者模式 示例 源码分析装饰者模式的典型应用Java I/O 中的装饰者模式spri...

  • Java设计模式之装饰器模式

    Java设计模式之装饰器模式 本文仅是个人观点,如有错误请指正 简介 装饰器模式(Decorator Patter...

  • java模式--装饰模式

    装饰模式 : 动态地给一个对象添加一些额外的职责 , 就增加功能来说 ,装饰模式比生成子类更为灵活

  • 9、结构型模式之装饰模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapp...

  • 《java与设计模式》之装饰模式

    (转载)原文地址 在阎宏博士的《JAVA与模式》一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又...

网友评论

      本文标题:Java 装饰模式

      本文链接:https://www.haomeiwen.com/subject/oenbkrtx.html