通过一段关于超人与人的java代码
//定义一个技能(skill)接口
interface Skill {
public abstract void skill();
}
//定义人类的类 并实现这个技能接口
class Man implements Skill {
@Override
public void skill() {
System.out.println("走");
System.out.println("跑");//人类的技能 走,跑
}
}
//定义超人的类
class SuperMan implements Skill {
private Man m;
// 关键点:在构造方法中传入被装饰类的对象
SuperMan(Man m) {
this.m = m;
}
@Override
public void skill() {
m.skill(); // 原来的方法
System.out.println("飞");//超人的技能
}
}
上面基本完成装饰者模式的构建,超人既保留了人的技能,并且不回去改变,而自身又区别与人,因为自身会飞。下面我们来验证下:👇
public class Decorator_test {
public static void main(String[] args) {
SuperMan m = new SuperMan(new Man());
m.skill();
}
}
装饰者模式的设计原则为:对扩展开放、对修改关闭
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
铁憨憨