装饰者设计模式

本文深入解析装饰者设计模式,通过具体实例展示如何使用装饰类增强或修改被装饰类的功能,而不改变其结构。介绍了装饰者模式与继承的区别,以及其在自定义数据库连接池等场景的应用。

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

说明: B和C实现同一个接口A, C为被装饰类,B为装饰类(可使用C的原有功能,也能对C的某些功能进行升级)。

代码实现:

接口类:

package com.klose.装饰设计模式;

public interface Coder {

    public void code();

    public void study();
}

被装饰类:

package com.klose.装饰设计模式;

public class Student implements Coder {
    @Override
    public void code() {
        System.out.println("java");
        System.out.println("python");
        System.out.println("node");
    }

    @Override
    public void study() {
        System.out.println("do something...");
    }
}

装饰类:

package com.klose.装饰设计模式;

public class TopStudent implements Coder {
    //获取被装饰类的引用
    private Coder coder;

    //在构造方法中传入被装饰类的对象
    public TopStudent(Coder coder){
        this.coder=coder;
    }

    //对原有功能进行升级
    @Override
    public void code() {
        System.out.println("do something myself...");
        coder.code();
    }

    //使用原有功能
    @Override
    public void study() {
        coder.study();
    }
}

测试效果:

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        TopStudent topStudent = new TopStudent(student);
        topStudent.code();
        System.out.println();
        topStudent.study();
    }
}

 

 

好处:

被装饰类只要实现接口都能用装饰类进行包装,对方法的使用灵活;

相比继承而言,耦合性不强,被装饰的类的变化与装饰类的变化无关;

 

使用场景:创建自定义数据库连接池,改写自己写的connection类中的close方法,并不关闭而是把连接交还给连接池pool。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值