简单的装饰模式,一句话概括“不动原代码的情况下,拓展新的功能”

本文主要介绍了装饰模式,它能在不修改原类的情况下动态拓展类的功能,与代理模式有所区别。还给出了装饰模式的实现示例,需求是在不改动只能打印“人”的类的情况下,在后面打印“帅”字,并说明了实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习装饰模式

         1、什么是装饰模式

               1、在不修改原来的类的情况下,动态的拓展这个类的功能,比如,现在有一个人,想要调用的时候加上帅这个修饰,也比如一个图片,在创建之后加上一些水印,这些都是可以使用装饰模式来处理的,有点类似于代理模式,但是需要原对象传入

               2、和代理模式的区别:装饰模式主要是传入一个对象,来对这个对象进行增强能力,即使怎么装饰,对象还是这个对象,不变。

                    代理模式是在自己的构造器中new一个新的对象,调用者不需要知道这个对象是谁,只需要知道事情做了就好了。

         2、装饰模式实现

                 需求:一个类,现在只能打印人这么一句话,在不动这个类的情况下,打印在后面打印一个“帅”字

                 1、首先创建一个Person这个类,这个类只能简单的打印一句人

public class Person{
    public void show() {
        System.out.println("人");
    }
}

                 2、添加一个装饰类,这个类就是核心,其实就是先打印Person里的show方法,再调用装饰类中的show方法,这里的Person是根据构造方法注入的,可以用其他方式,看个人情况。

//描述高的类
public class HeightDecorator{

    private Person person;

    //构造方法的方式加入 person这个类
    public HeightDecorator(Person person) {
        this.person = person;
        //打印person里的show方法
        person.show();

        //再执行自己的show方法
        show();
    }

    public void show() {
        System.out.println("高");
    }
}

               3、那我们就开始调用这个装饰类了

 public static void main(String[] args) {
        //首先需要Person类可以注入
        Person person = new Person();

        //由于在内部已经调用了person的show和自己的show,所以直接new就会全部调用,
        new HeightDecorator(person);
    }

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值