• 欢迎来到我的博客
  • [email protected]

代理模式、装饰器模式、桥接模式

学习笔记 tianlan 1个月前 (10-21) 61次浏览 0个评论 扫描二维码
文章目录[隐藏]

前言

之所以把这几个模式放在一起,是因为他们同属于【结构型】设计模式,并且也很相似,让人难以区分。

代理模式

这个不用多说,对【被代理对象】进行访问控制,或者对其功能进行增强(不改变类的情况下添加一些额外的功能)。

装饰器模式

动态地给【被装饰对象】添加一些额外的职责。

代理模式、装饰器模式、桥接模式

桥接模式

将抽象与实现分离,这样两者可以独立地改变。

代理模式、装饰器模式、桥接模式

区别

使用方式

// 代理模式
$proxy = new CarProxy(new RealObj());

// 装饰模式
$decorator = new PinkDecorator(new RealObj());

// 桥接模式
$car = new Car();
$car->setColor(new Pink());

代理模式和装饰器模式

代理模式和装饰器模式都持有RealObject(被代理的对象/被装饰的对象)

代理模式用于控制访问,即原本功能的执行与否取决于场景条件,对用户而言重要的是原本的功能

装饰器模式用于动态地添加职责,原本的功能必须执行,对用户而言重要的是添加的职责

桥接模式和装饰器模式

桥接模式用于抽象和实现的分离,即从不同维度划分类的属性,以聚合的方式桥接,降低耦合。

与装饰器的区别在于装饰器是对 对象行为的扩展,对需求变化的适应,桥接是对 对象属性不同维度的抽象分离,对属性变化的适应。

e.g.装饰:牛奶可以加糖,加咖啡,等等;

CandyMilk(Milk)

桥接:饮料(牛奶,),添加剂(配方:糖:90%,辣椒:10%)

Milk.setAddition(new Addition(…));

摘自:http://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/decorator.html


天蓝, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:代理模式、装饰器模式、桥接模式
喜欢 (0)
[[email protected]]
分享 (0)

您必须 登录 才能发表评论!