【设计模式】装饰者模式(Java版)

通过一段关于超人与人的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();
    }
}

装饰者模式的设计原则为:对扩展开放、对修改关闭

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

“【设计模式】装饰者模式(Java版)”的一个回复

发表评论

邮箱地址不会被公开。 必填项已用*标注