当前位置: 移动技术网 > IT编程>软件设计>设计模式 > 装饰者设计模式

装饰者设计模式

2020年07月31日  | 移动技术网IT编程  | 我要评论
说明: 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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网