惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Blog — PlanetScale
Blog — PlanetScale
C
Cybersecurity and Infrastructure Security Agency CISA
K
Kaspersky official blog
L
LangChain Blog
I
Intezer
N
News and Events Feed by Topic
C
Check Point Blog
MyScale Blog
MyScale Blog
I
InfoQ
Last Week in AI
Last Week in AI
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 热门话题
T
Threatpost
Y
Y Combinator Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Help Net Security
The GitHub Blog
The GitHub Blog
V
Vulnerabilities – Threatpost
NISL@THU
NISL@THU
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
A
About on SuperTechFans
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Martin Fowler
Martin Fowler
P
Privacy International News Feed
AWS News Blog
AWS News Blog
Simon Willison's Weblog
Simon Willison's Weblog
S
Securelist
T
Tor Project blog
C
CERT Recently Published Vulnerability Notes
Scott Helme
Scott Helme
A
Arctic Wolf
有赞技术团队
有赞技术团队
博客园 - 三生石上(FineUI控件)
T
Tenable Blog
The Hacker News
The Hacker News
博客园_首页
Cisco Talos Blog
Cisco Talos Blog
Spread Privacy
Spread Privacy
Microsoft Security Blog
Microsoft Security Blog
N
News and Events Feed by Topic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V
V2EX
G
Google Developers Blog
Webroot Blog
Webroot Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
WordPress大学
WordPress大学
P
Palo Alto Networks Blog
T
Threat Research - Cisco Blogs

博客园 - ColorSky

小议winForm的热键 一定要找到你--IE隐藏文件 One sentence humor Self-service How do you add reference dll from GAC? 其实它不是我想象 关于目标 英语文化陷井 Everyday English - Glove Troubleshooting for Asp.net CS0016 error [ZZ]C#四种排序算法 唐僧的家书 minute_DesignPatternExplained(4) 管理的问题-聪明和笨的程序员 一个应用程序在某一时刻,到底是用了多少内存? 揭秘devenv 如何以两种启动模式启动 程序员,为你的程序而骄傲吧 算法的力量 转载同事写的:2006TechED感想
minute_DesignPatternExplained(2)
ColorSky · 2006-09-29 · via 博客园 - ColorSky

6-7章,Façade, Adapter模式

Façade模式

例1:如果要使用一个极其复杂的现有系统的部分功能,是小组的人都去学习这个系统呢,还是我们抽签决定,输的人负责研究老系统,编写例程,供其它人用?

例2:对于使用操作系统提供的繁杂的底层功能,Windows操作系统提供了一组类库Win32 API,简化对操作系统底层调用?

 解决方案:

标准图
     

意图                                                        希望简化原有系统的使用方式,定义自己的接口。

问题                                                       只需使用某个复杂系统的子集,或需要以一种特殊的方式与系统交互

解决方案                                                Façade为原有系统的客户提供一个新或者简化的接口,使系统更容易使用

参与者和协作者                                   接口本身和各个子系统

效果                                                       Façade模式简化了对所需子系统的使用,但是由于Façade并不完整,因此客户可能无法使用某些功能

实现                                                       让使用算法的类(Context)包含一个抽象策略类(Strategy)

                                                                该抽象类定义一个抽象方法指定如何调用

Adapter模式

例1:定制一个画图程序,设计如下:


要增加一个Circle类,而且我们发现另外一个人已经编写了一个处理圆形的类,叫XXCircle。方法命名为:

DisplayIT, FillIt,UndisplayIT。我们不能直接使用XXCircle,也不可能修改XXCircle类。因此采用Adapter模式,调用XXCircle.

 

例2:.Net 程序如果要调用已有的Com组件,.Net IDE会生成一个InterOPXXX.dll,包装Com的接口,供.Net程序调用。

解决方案:

标准图

意图                                使控制范围之外的一个原有对象和某个接口匹配

问题                                                       系统的数据和行为都正确,但接口不符

解决方案                                                Adapter模式提供了具有所需接口的包装类

参与者和协作者                                                  Adapter改变了Adaptee的接口,使Adaptee与Adapter的基类Target匹配。这样Client就可以使用Adaptee

效果                                                       Adapter模式使原有对象能够适应新的类结构,不受其接口限制

实现                                                       将原有类包含在另一个类之中。

                                                            让包含类与需要的接口匹配,调用被包容类的方法

比较:

                                                                                    Façade模式                             Adapter模式

是否存在既有的类?                                                         是                                                      是                    

是否必须按某个接口设计?                                             否                                                      是

对象需要多态行为?                                                         否                                                      可能

需要更简单的接口吗?                                                     是                                                      否

--End-