结构型:代理模式 Vs 适配器模式 Vs 门面模式(外观模式)
先上UML图
代理模式:

适配器模式:

门面模式(外观模式):

打了例子……呃……举个比方
代理模式: 水浒街,西门庆看上潘金莲,想和她嘿咻嘿咻,但是自己有不能去找潘金莲去说,于是他找到了金牌代理人王婆,王婆就去找潘金莲,经过一番商谈,潘金莲终于答应了西门庆的请求。
适配器模式: 水浒街,西门庆看上潘金莲,想和她嘿咻嘿咻,于是就去潘金莲家,但是潘金莲不在,于是就给王婆穿上潘金莲的衣服,带上面具,假扮成潘金莲,和西门庆嘿咻嘿咻了……(有点恶心啊)
门面模式(外观模式): 水浒街,西门庆想去怡红院嘿咻嘿咻,于是他选好了姑娘,调好了门房,嘿咻之后交完了钱,由退了房。现在怡红院推出门面套餐,只要选门面套餐,就自动选好了最好的房子,最好的姑娘,连房租都可以自动记载账上,西门庆只要嘿咻就可以了。
优缺点
代理模式:优点是协调调用与被调用,实现部分解耦,代理模式能保护对真实对象的访问,代理远程机器可以使得远程机器能无阻碍协调地处理客服端请求。缺点是增加代理层调用流程复杂,可能出错,同时速度可能变慢。 用例子说明是:优点将西门庆与潘金莲隔离开来,保护了潘金莲的名声,同时使西门庆与潘金莲交流顺畅。缺点是多了王婆这一层,传达交流可能会出错,同时要肯定会延迟两人的交流。
适配器模式:优点是将目标类与适配者类解耦,增加了类的透明性,灵活性扩展性好。缺点是在Java等语言中,不支持多继承,所以类适配器只能适配一个,而对象适配器想置换适配类的方法就不容易。 用例子来说:优点是西门庆知道那是王婆假扮的,而且他能随时让王婆假扮成其他人,灵活性好。缺点是在Java中,类适配器中王婆只能假扮一个姑娘,而对象适配器中王婆假扮的姑娘取乐方式只有嘿咻嘿咻。
门面模式(外观模式):优点是松散耦合,被调模块更容易扩展和维护。简单易用,节省了调用者的处理流程,更好的划分了访问层次,而且用户不知道内部实现,还提高了安全性。缺点是不符合开闭原则,如果要新增功能,继承复用都没有用,只能修改门面模块代码。 用例子来说:优点是西门庆叫姑娘时简单容易,而且选姑娘、选房子、记账可以统筹规划,专门找人负责,各人之间互不相关,西门庆也不知道门面套餐内部机制,怡红院也挣钱也更隐蔽。缺点是有新的流程,都必须修改门面套餐。
适用范围
代理模式:可以用于远程访问,虚拟代理,以及权限控制,智过能引用代理等。
适配器模式:当系统的数据与行为都正确,但是接口不符合是,可以通适配达到协调
门面模式:开发时通过门面模式可以隐藏复杂的实现步骤,维护旧系统的时候,可以封装遗留代码,提供清晰借口。
结构型:代理模式 Vs 适配器模式 Vs 门面模式(外观模式)的更多相关文章
- JAVA设计模式(09):结构型-代理模式(Proxy)
代理模式是经常使用的结构型设计模式之中的一个,当无法直接訪问某个对象或訪问某个对象存在困难时能够通过一个代理对象来间接訪问,为了保证client使用的透明性,所訪问的真实对象与代理对象须要实现同样的接 ...
- 结构型--代理模式(Proxy)
一.代理模式是什么? 代理模式属于GOF23设计模式中结构型中的设计模式,通过代理对象来屏蔽(部分或者屏蔽)对真实对象的直接访问,下图为UML图: 在代理模式中组件包括:抽象角色接口.代理角色类.真实 ...
- 结构型---代理模式(Proxy Pattern)
代理模式的详细介绍 代理模式按照使用目的可以分为以下几种: 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象.这个不同的地址空间可以是本电脑中,也可以在另一台电脑中.最典型 ...
- 使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...
- 设计模式 - 门面模式(Facade Pattern,也叫外观模式)
简介 场景 将系统划分为若干个子系统有利于降低系统的复杂性,但是这会增加调用者的复杂性.通过引入 Facade 可以对调用者屏蔽系统内部子系统的细节. Java 中有多个日志库,例如 log4j.lo ...
- 设计模式GOF23(结构型模式:代理模式,适配模式,桥接模式,组合模式,装饰模式,外观模式,享元模式)
结构型模式: – 分类: • 适配器模式.代理模式.桥接模式.装饰模式.组合模式.外观模式.享元模式 – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题. 结构 ...
- DesignPattern(四)结构型模式(下)
上篇链接 https://www.cnblogs.com/qixinbo/p/9023764.html 继续介绍最后三种结构型模式 外观模式 外观模式,也称作 ”门面“模式,在系统中,客户端经常需要 ...
- Java 23种设计模式详尽分析与实例解析之二--结构型模式
Java设计模式 结构型模式 适配器模式 模式动机:在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式.通常情况下,客户端可以通过目标类的接口访问它所提供的服务.又是,现有的类可以满足客 ...
- 【转】设计模式(九)外观模式Facade(结构型)
设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...
随机推荐
- IOS成长之路-调用照相机和相册功能(转)
转载自:http://blog.csdn.net/like7xiaoben/article/details/8465237 //先设定sourceType为相机,然后判断相机是否可用(ipod)没相机 ...
- Sql之表的连接总结
1.交叉连接(就是将两张表的数据 交叉组合在一起) 有两张表 客户表:[Sales.Customers] 和订单表:[Sales.Orders]. 业务需求:实现 Customer中custid(客户 ...
- poj 1659 Frogs' Neighborhood (DFS)
http://poj.org/problem?id=1659 Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total S ...
- Java发送邮件(带附件)
实现java发送邮件的过程大体有以下几步: 准备一个properties文件,该文件中存放SMTP服务器地址等参数. 利用properties创建一个Session对象 利用Session创建Mess ...
- 5.3:从bean的实例中获取对象
5.3 从bean的实例中获取对象 在getBean方法中,getObjectForBeanInstance是个高频率使用的方法,无论是从缓存中获得bean还是根据不同的scope策略加载bean. ...
- Smarty格式化数字为INT数
<? require("setup.php"); define('PAGETITLE','pagtitle'); function insert_top($lid,$sid) ...
- SQL Server 2008 设计与实现笔记(一)
Chart5 create database MovieRental; select name, SUSER_SNAME(sid) as [login] from sys.database_princ ...
- Akka Stream文档翻译:Motivation
动机 Motivation The way we consume services from the internet today includes many instances of streami ...
- POJ2526+简单几何
题意:给定的这些点是否有一个对称中心. PS:我写得有点啰嗦.. 就是把小的x和大的x进行匹配. #include<stdio.h> #include<algorithm> # ...
- HDU2110+母函数
/* 母函数(生成函数) 题意: 有n种资产,每种资产num份,每份有val的价值 问取出总价值的1/3有多少种方案 */ #include<stdio.h> #include<st ...