欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

装饰者设计模式

程序员文章站 2022-03-10 17:21:38
说明: 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 {...

说明: 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。

本文地址:https://blog.csdn.net/Klose1123/article/details/107660668

相关标签: 设计模式 java