结构型设计模式对比 设计模式(十六)

 原文地址:image_5c09c064_5021

 
强表现
适配器、装饰器、代理、组合、桥接模式,这几种模式比较强烈的表现了“间接”“代理”“委托”的含义 
从图中可以清楚地看得出来,他们都有“代理”的含义
适配器模式,通过继承或者组合方式,“代理”了,被适配角色Adaptee
装饰器模式,通过组合的方式,"是你还有你",内部拥有Component,代理了被装饰的具体构建 ConcreteComponent
代理模式,通过组合的方式,内部拥有RealSubject,代理了真实主题角色
组合模式,通过组合的方式,内部包含叶子节点或者树枝节点,内部“代理”了 子对象
桥接模式,通过组合的方式,内部拥有Implementor,指向实现者
 
如果装饰器模式只有一个被装饰的类ConcreteComponent,也只有一个装饰器角色ConcreteDecorator
省略掉Decorator ,他跟代理模式的结构可以说是一样的
省略掉装饰器模式结构图中的ConcreteDecorator角色,组合模式和装饰器模式的结构就完全一样了
如果只有一种类型的ConcreteImplementor,桥接模式又与对象适配器模式相同
 
虽然说他们都有“代理”的含义,但是他们又有很大差别
适配器模式下,“代理”的对象是功能相近的替代方案,比如,插座适配器可以进行插头转换
使得原本不兼容,不能够一起工作的那些类能够一起工作
代理模式下,“代理”的真实主题的对象RealSubject,从而对真实对象进行隐藏,封装
透明的对外界提供服务,控制外界对这个对象的访问
装饰器模式下,“代理”的是抽象的Component构建,能够代理所有的ConcreteComponent类型
装饰器和被装饰的构建都是Component,重点在于功能的扩展,添加额外的职责
组合模式下,“代理”的是抽象构建Component,代理的是子对象,用于描述“整体-部分”的概念
桥接模式,“代理”的是实现角色Implementor,代理的是具体的实现,用于将抽象与实现进行分离
分离后通过桥接模式进行连接
他们虽然都是“代理”,但是他们的侧重点不同,被代理的事物的性质不同
适配器模式在代理的过程中,重点在于适配,不会增加额外的功能
代理模式侧重于控制,当然也通常用于增加功能
如果代理模式,代理的不是真实主题对象RealSubject,而是抽象构建Subject,显然,就演化成了装饰器模式
因为代理模式不光能够控制外界对真实对象的访问,他也能够提供额外的服务
装饰器模式则是重点在于功能的扩展,增肌额外的职责
而组合模式,重点在于形成“整体--部分”的结构,并且对外界客户端程序,提供一致的访问形式
 
弱表现
享元模式和外观模式也是一定程度的代理
享元模式,通过内部状态与外部状态的分离,通过享元池中的享元对象,代理了所有的具有内外状态完整的对象
对客户端来说就是有如此多的对象, 只不过内存中却仅有少量的对象
 
外观模式在结构上完全看不出来“代理”的含义,但是他在业务逻辑上充当的也恰恰是“接口人”“协调者”“控制台”的角色
所以也可以认为是“代理”了内部的子系统
 
代理模式与适配器模式
代理模式和适配器模式都需要借助于内部的“被代理”对象,或者“被适配者”对象进行工作
也就是说他们都将自己的工作委托出去
 
但是代理模式中,代理者与被代理者他们拥有相同的接口,也就是拥有相同的对外呈现,重点在于对真实对象的隐藏,客户端请求的透传,并且可以额外的增加一些控制,管理
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信