装饰者模式(菜鸟进阶大神装饰过程)

装饰者模式允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有类的一个包装。
这种设计模式创建了一个装饰类,用来包装原有的类,并保证类方法签名完整的前提下,提供了额外的功能。

我们就拿学习技能来说,原本一个IT菜鸟,经过学习掌握了前端的知识,再经过学习掌握了后端基本的开发框架,再经过学习掌握了数据库相关的技术。最终成为大神的修炼过程(装饰过程)

public class DecorateDemo {
    public static void main(String[] args) {
        rubbish ru = new rubbish();//刚开始是一个小垃圾
        OldGog oldGog = new OldGog(ru);//开始学习 装饰

        //大神进阶第一步
        OldGog oldGog1 = new StudyJAVA(oldGog);
        //大神进阶第二步
        OldGog oldGog2 = new StudyMYSQL(oldGog1);
        //大神进阶第三步
        OldGog oldGog3 = new StudyWeb(oldGog2);
        //查看学习的成果
        oldGog3.study();

    }
}

//即把一个菜鸟具有的行为抽离出来
interface IPerson{
    void study();//学习
}

//真实对象
class rubbish implements IPerson{
    @Override
    public void study() {
        System.out.println("我要成为一个大神");
    }
}

//开时学习成一个大神(包装过程)  
class OldGog implements IPerson{
    protected IPerson person;
    public OldGog(IPerson person) {
        this.person = person;
    }
    @Override
    public void study() {
        person.study();
    }
}
//具体装饰类
class StudyWeb extends OldGog{
    public StudyWeb(IPerson person) {
        super(person);
    }
    public void studyWeb() {
        System.out.println("今天我学习了web技术");
    }

    @Override
    public void study() {
        super.study();
        studyWeb();
    }
}

class StudyJAVA extends OldGog{

    public StudyJAVA(IPerson person) {
        super(person);
    }

    public void studyJava() {
        System.out.println("今天我学习了JAVA");
    }

    @Override
    public void study() {
        super.study();
        studyJava();
    }
}

class StudyMYSQL extends OldGog{
    public StudyMYSQL(IPerson person) {
        super(person);
    }

    public void studyMysql() {
        System.out.println("今天我学习了数据库");
    }

    @Override
    public void study() {
        super.study();
        studyMysql();
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值