装饰模式和代理模式的区别(4大区别详解)

装饰模式和代理模式的区别(4大区别详解)-mikechen

装饰模式代理模式都是常见的Java设计模式,下面详解装饰模式和代理模式的4大区别@mikechen

装饰模式

装饰模式(Decorator Pattern)是一种结构型模式,它允许动态地为一个对象添加额外的行为和责任,而不需要修改原始对象的结构。

装饰模式的实现,包含以下角色:

装饰模式和代理模式的区别(4大区别详解)-mikechen

这种模式可以在运行时动态地添加、修改或删除对象的行为,它通常用于需要在不同情况下使用不同的行为或装饰的情况下。

例如:在图形用户界面(GUI)中添加各种样式,或外观装饰。

 

代理模式

代理模式,英文名Proxy Pattern,是一种结构型设计模式,它提供了一种代理对象来控制访问另一个对象。

代理模式的主要分为3大角色,如下图所示:

装饰模式和代理模式的区别(4大区别详解)-mikechen

代理对象可以在访问另一个对象之前或之后执行一些操作,例如验证权限、记录日志或缓存结果。

代理模式通常用于需要控制对某些对象的访问,或需要在访问某些对象之前或之后执行一些操作的情况。

 

两者的区别

装饰模式代理模式相同点都属于结构型模式,它们之间的区别如下,主要包含4点:

1.意图不同

装饰模式的主要目的是在不修改原有类的前提下,动态的添加一些新的功能和行为。

而代理模式的主要目的是控制对象的访问,并在访问对象时增加一些额外的处理。

2.所处位置不同

在装饰模式中,装饰者和被装饰者都实现同一个接口或继承同一个父类。

而在代理模式中,代理类和被代理类也都实现同一个接口或继承同一个父类。

3.对象关系不同

在装饰模式中,被装饰者和装饰者之间是一个“has-a”的关系,即一个对象拥有另一个对象。

而在代理模式中,代理类和被代理类之间是一个“is-a”的关系,即代理类和被代理类是同一个类型的对象。

4.装饰的方式不同

装饰模式中,装饰者可以对被装饰者进行多次装饰,而每个装饰者只关心自己的装饰行为,不关心其他装饰者的行为。

而在代理模式中,代理类通常只对被代理类进行一次代理,不会对被代理类进行多次代理。

以上就是装饰模式和代理模式的区别详解,更多设计模式请查看:Java设计模式:23种设计模式(万字图文全面总结)

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法