前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >装饰者模式

装饰者模式

作者头像
晚上没宵夜
发布2020-03-10 09:17:50
3880
发布2020-03-10 09:17:50
举报
文章被收录于专栏:Howl同学的学习笔记

1. 装饰者模式(Decorator Pattern)

定义

在不改变原代码结构的情况下,动态地扩展一个对象的功能,相比继承有更灵活的实现方式。见名知意,其就是在需要增强功能的对象上包装一层代码,达到增强功能的效果

作用

装饰者模式在对象创建好之后才动态给对象增加功能,也可以选择不增加,自由灵活。而继承是在对象创建时就已经确定,继承如果要扩展功能,因为单继承原因需要多重继承,会显得麻烦臃肿

2. 实现

准备

一条汪的接口

代码语言:javascript
复制
public interface Dog {
    abstract void eat();
}

某汪的实现类

代码语言:javascript
复制
public class MyDog implements Dog {
    public void eat() {
        System.out.println("狗吃肉");
    }
}

下面我们使用装饰者模式给狗狗增加功能

2.1 首先得有装饰器
代码语言:javascript
复制
//实现Dog接口
public abstract class DogDecorator implements Dog {

    private Dog dog;
    
    //用构造方法来获取需要增强功能的狗狗
    public DogDecorator(Dog dog) {
        this.dog = dog;
    }

    //调用父类狗狗的功能
    public void eat() {
        dog.eat();
    }
}
2.2 用装饰器来增强功能

我们想狗狗在吃饭前洗手,需要增加洗手的功能

代码语言:javascript
复制
//继承装饰类
public class WashHandDog extends DogDecorator {

    public WashHandDog(Dog dog) {
        super(dog);
    }
    
    //需要增强的功能
    public void WashHand(){
        System.out.println("吃饭前洗手");
    }

    //重写方法
    public void eat(){
        WashHand();
        super.eat();
    }
}

现在还想狗狗吃完饭能去打怪兽

代码语言:javascript
复制
public class BeatMonster extends DogDecorator {

    public BeatMonster(Dog dog) {
        super(dog);
    }
    
    public void BeatMonster(){
        System.out.println("我的狗狗还能打小怪兽");
    }
    
    public void eat(){
        super.eat();
        BeatMonster();
    }
}
2.3 升级版狗狗出现
代码语言:javascript
复制
public static void main(String[] args) {
        
        Dog mydog = new MyDog();
        mydog = new WashHandDog(mydog);
        mydog = new BeatMonster(mydog); 
        mydog.eat();
}
代码语言:javascript
复制
吃饭前洗手
狗吃肉
我的狗狗还能打怪兽

至此我们的装饰者模式就搞定了,是不是很简单,以后遇到增强功能的需求时可以想一想装饰者模式

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-12-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 装饰者模式(Decorator Pattern)
  • 2. 实现
    • 2.1 首先得有装饰器
      • 2.2 用装饰器来增强功能
        • 2.3 升级版狗狗出现
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档