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

推荐订阅源

U
Unit 42
S
Security Affairs
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
Microsoft Security Blog
Microsoft Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
有赞技术团队
有赞技术团队
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
Microsoft Azure Blog
Microsoft Azure Blog
V
V2EX
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
C
Cisco Blogs
T
Tor Project blog
The Hacker News
The Hacker News
雷峰网
雷峰网
MyScale Blog
MyScale Blog
博客园 - 司徒正美
AWS News Blog
AWS News Blog
GbyAI
GbyAI
Y
Y Combinator Blog
D
DataBreaches.Net
Simon Willison's Weblog
Simon Willison's Weblog
S
Securelist
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
T
Tenable Blog
L
LangChain Blog
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
The Cloudflare Blog
A
About on SuperTechFans
IT之家
IT之家
F
Fortinet All Blogs
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
NISL@THU
NISL@THU
爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
W
WeLiveSecurity
A
Arctic Wolf
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog

博客园 - 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-