装饰者设计模式
程序员文章站
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
上一篇: 前端开发的设计模式(常用单例模式、工厂、建造者、代理、中介、观察者、策略)
下一篇: 快排