Java设计模式之装饰者模式

装饰者模式是指在不改变原有对象的基础上,将功能附加到对象上,扩展原有对象的功能。
装饰者模式中包含四个角色:

  • 被装饰者:可以是一个接口或抽象类,定义一些已有的功能;
  • 被装饰者实现类:实现了被装饰者的具体功能;
  • 装饰者:一个继承了被装饰者的抽象类,必须是个抽象类,而且类中必须含有被装饰者的引用;
  • 装饰者子类:装饰者的子类,实现了被装饰者的方法。

下面以给视频增加评论为例:
创建IVideo接口:

public interface IVideo {

    void play();
}

创建视频实现类:

public class Video implements IVideo {
    @Override
    public void play() {
        System.out.println("播放视频");
    }
}

创建业务类,播放视频:

public class Test {
    public static void main(String[] args) {
        IVideo video = new Video();
        video.play();
    }
}
播放视频

现在要为视频增加一个评论:

public abstract class VideoDecorator extends IVideo {

    protected IVideo iVideo;

    public VideoDecorator(IVideo iVideo) {
        this.iVideo = iVideo;
    }
}
public class Comment extends VideoDecorator {

    public Comment(IVideo iVideo) {
        super(iVideo);
    }

    @Override
    public void play() {
        iVideo.play();
        System.out.println("增加一个评论");
    }
}

在业务类上实现为视频增加两个评论:

public class Test {
    public static void main(String[] args) {
        IVideo video;
        video = new Video();
        video = new Comment(video);
        video = new Comment(video);
        video.play();
    }
}
播放视频
增加一个评论
增加一个评论

装饰者模式适用于以下场景:

  1. 扩展一个类的功能;
  2. 动态给一个对象添加功能,还可以动态撤销

装饰者模式和代理模式

我们可以看出装饰者模式和代理模式有相似之处,其应用场景都包含扩展一个类的功能,但是二者区别如下:

  • 装饰者模式侧重于动态地扩展一个类的功能,既能增强还能撤销,而代理模式侧重于控制对一个对象的访问并增强这个对象,无法撤销增强;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值