装饰这个词来自建筑行业,新房装修经常听到这个词。在Java中装饰模式,简单理解就是,把一个类给包装起来,放在一个新类中,新的类会在原来被包装类功能基础上,增加别的功能。这样保证出来的新类就具有强大的功能,其实有点像继承,有没有。在继承中,子类拥有父类的属性和方法,但是耦合性太强。父类发生改变,子类一定也跟随改变。装饰模式,和继承最大的区别就是耦合性不那么强了。
1.装饰设计模式代码例子
package io;
public class Demo5_Wrap {
public static void main(String[] args) {
Programer p = new Programer(new Student());
p.code();
}
}
interface Coder {
// 定义一个程序员接口,有一个会写代码的抽象方法
public void code();
}
class Student implements Coder {
//定义一个大学生类,大学生实现了程序员这个接口,并实现了code方法
@Override
public void code() {
System.out.println("Javase");
System.out.println("JavaWeb");
}
}
class Programer implements Coder {
//1. 获取被装饰类的引用
private Student s; // 获取学生引用
//2. 在构造方法中传入被装饰类的对象
public Programer (Student s) { //传入一个学生对象
this.s = s;
}
//3.对原有功能进行升级
@Override
public void code() {
s.code(); //学生具有的javase javeweb技能
System.out.println("数据库");
System.out.println("人工智能");
System.out.println("大数据");
}
}
上面Programer这个类实现过程就是采用装饰设计模式,拿到了大学生类具备的javase和javaweb技能,同时加入了数据库,人工智能和大数据的开发能力。装饰设计模式的好处是耦合性不强,被装饰的类的变化与装饰类的变化无关。