文档章节

模式总结之结构型:代理模式 Vs 适配器模式 Vs 门面模式(外观模式)

奋斗到天明
 奋斗到天明
发布于 2015/08/27 16:55
字数 985
阅读 1061
收藏 0

三哥们都是结构型模式,长得又有点像,为了深刻区分,写文祭奠一下。

先上UML图

代理模式:

s1

适配器模式:

s2

门面模式(外观模式):

s3

打了例子……呃……举个比方

代理模式: 水浒街,西门庆看上潘金莲,想和她嘿咻嘿咻,但是自己有不能去找潘金莲去说,于是他找到了金牌代理人王婆,王婆就去找潘金莲,经过一番商谈,潘金莲终于答应了西门庆的请求。 

适配器模式: 水浒街,西门庆看上潘金莲,想和她嘿咻嘿咻,于是就去潘金莲家,但是潘金莲不在,于是就给王婆穿上潘金莲的衣服,带上面具,假扮成潘金莲,和西门庆嘿咻嘿咻了……(有点恶心啊) 

门面模式(外观模式): 水浒街,西门庆想去怡红院嘿咻嘿咻,于是他选好了姑娘,调好了门房,嘿咻之后交完了钱,由退了房。现在怡红院推出门面套餐,只要选门面套餐,就自动选好了最好的房子,最好的姑娘,连房租都可以自动记载账上,西门庆只要嘿咻就可以了。

优缺点

代理模式:优点是协调调用与被调用,实现部分解耦,代理模式能保护对真实对象的访问,代理远程机器可以使得远程机器能无阻碍协调地处理客服端请求。缺点是增加代理层调用流程复杂,可能出错,同时速度可能变慢。 用例子说明是:优点将西门庆与潘金莲隔离开来,保护了潘金莲的名声,同时使西门庆与潘金莲交流顺畅。缺点是多了王婆这一层,传达交流可能会出错,同时要肯定会延迟两人的交流。 

适配器模式:优点是将目标类与适配者类解耦,增加了类的透明性,灵活性扩展性好。缺点是在Java等语言中,不支持多继承,所以类适配器只能适配一个,而对象适配器想置换适配类的方法就不容易。 用例子来说:优点是西门庆知道那是王婆假扮的,而且他能随时让王婆假扮成其他人,灵活性好。缺点是在Java中,类适配器中王婆只能假扮一个姑娘,而对象适配器中王婆假扮的姑娘取乐方式只有嘿咻嘿咻。 

门面模式(外观模式):优点是松散耦合,被调模块更容易扩展和维护。简单易用,节省了调用者的处理流程,更好的划分了访问层次,而且用户不知道内部实现,还提高了安全性。缺点是不符合开闭原则,如果要新增功能,继承复用都没有用,只能修改门面模块代码。 用例子来说:优点是西门庆叫姑娘时简单容易,而且选姑娘、选房子、记账可以统筹规划,专门找人负责,各人之间互不相关,西门庆也不知道门面套餐内部机制,怡红院也挣钱也更隐蔽。缺点是有新的流程,都必须修改门面套餐。

适用范围

代理模式:可以用于远程访问,虚拟代理,以及权限控制,智过能引用代理等。 

适配器模式:当系统的数据与行为都正确,但是接口不符合是,可以通适配达到协调 

门面模式:开发时通过门面模式可以隐藏复杂的实现步骤,维护旧系统的时候,可以封装遗留代码,提供清晰借口。

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
PHP设计模式(一):简介及创建型模式

我们分三篇文章来总结一下设计模式在PHP中的应用,这是第一篇创建型模式。 一、设计模式简介 首先我们来认识一下什么是设计模式: 设计模式是一套被反复使用、容易被他人理解的、可靠的代码设...

juhenj
2014/05/15
228
2
PHP设计模式(二):结构模式

上一篇我们介绍了设计模式的特性并且详细讲解了4种创建型模式,创建型模式是负责如何产生对象实例的,现在我们继续来给大家介绍结构型模式。(我的分享里面有) 一、什么是结构型模式? 结构...

juhenj
2014/05/15
675
1
小菜学设计模式——设计模式总结之结构型

1、设计模式总结 设计模式总共23个,但是常用的不到10个,下面就把这23个设计模式进行整理归类,具体如下: 1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型...

learn_more
2015/07/06
0
0
JavaScript设计模式入坑

JavaScript设计模式入坑 介绍 设计模式编写易于维护的代码。 设计模式的开创者是一位土木工程师。Σ( ° △ °|||)︴,写代码就是盖房子。 模式 模式一种可以复用的解决方案。解决软件设计中...

小小小8021
10/18
0
0
java设计模式-- 单例模式

在很久之前,也就是在大二暑假的时候,那时候看马士兵的视频教程中有提到很多的设计模式。 java的设计模式大致可以分为3大类,23种设计模式。 其中,创建型模式有5种:单例模式、建造者模式、...

爱学习的逃课君
2014/11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

对接比特币钱包的PHP开发包

BtcTool是一个基于第三方服务和离线裸交易实现的PHP比特币应用开发包,适合不希望部署本地 节点旳PHP开发者,开发包主要包含以下特性: 利用第三方服务获取指定地址的utxo集合 离线生成消费裸...

汇智网教程
1分钟前
0
0
【自用】 VHD to VHDX

VHDX: 在VHD 2TB 的基础上提供 64TB的容量。 支持逻辑扇区大小为 4KB,和每块的大小为 256MB,来优化虚拟磁盘性能。 比VHD提供更高的安全性、可靠性和性能。 convert-VHD –path d:\Hyper-v...

Tensor丨思悟
14分钟前
0
0
30 岁转行做Python开发晚吗?而且是零基础

最近有小伙伴问小编,30 岁转行做Python开发晚吗? 小编想说,其实无论男女,只要想学,有这个动力,就直接去行动。无论年龄,无论性别,只要你想一直勇往直前,那么想做的就去做吧~这里有一...

糖宝lsh
24分钟前
7
0
详解Spring中的Profile

前言 由于在项目中使用Maven打包部署的时候,经常由于配置参数过多(比如Nginx服务器的信息、ZooKeeper的信息、数据库连接、Redis服务器地址等),导致实际现网的配置参数与测试服务器参数混淆...

watermelon11
39分钟前
4
0
phper必知必会(二)

  1.说说你对进程,线程以及协程的理解      进程:是系统进行资源分配和调度的基本单位,是基本操作系统结构的基础。进程是程序基本执行的实体。进程与进程之间是独立的,拥有完全独立...

SEOwhywhy
55分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部