设计模式笔记(六)--适配器模式、外观模式
2015-08-25 16:16
267 查看
适配器模式(Adapter Pattern)
将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
简单点说,就是利用适配器将不符合自己期望的接口转成自己想要的接口。
对象适配器:
类适配器:
还是先看一下背景:对于客户电脑来说,有一个双孔插头,所以需要一个双孔插座来插上供电,也就是说,需要一个双孔接口(上图中的目标接口)。但是,离你最近的插座只有三孔的,那怎么办呢,把它换成两孔的?花钱到是不重要,重要的是有些电器还要用到三孔插座。所以有个“双孔-三孔适配器”是不是就好了?这个适配器的作用就是让三孔表现出双孔的功能,也就是将三孔(被适配者)适配给双孔(目标接口)。
适配器可以将变化的部分封装起来,这样即使变成四孔插座了也只需修改一下适配器就行了,这样就可以让客户从实现的接口解耦了(对于客户电脑来说,只关心双孔的插座,它只知道适配器有双孔插座,不会察觉到被适配者三孔插座的存在,客户和被适配者就解耦了)。
使用对象组合,以修改的接口包装被适配者(适配器持有被适配者的引用)
类适配器需要多重继承来实现,Java中肯定是不行的。使用多继承代替对象组合。
外观模式(Facade Pattern)
提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
简单点说,就是用一个接口控制各个子系统的接口,从而让客户只用这个高层接口就可以达到目的,不用再逐个操作子系统了,从此简化了接口。
比如说,作为客户的我们想看体验智能家居的看电影功能,我们只需按下遥控器上面的“看电影”按钮即可,系统会自动进行打开投影仪、关闭灯光、打开音响等子系统的行为。
外观模式的根本目的就是简化接口,而适配器模式的根本目的是转换接口。
“最少知识”原则的指导方针:在该对象的方法内,只应该调用以下范围内的方法:
该对象本身
被当作方法的参数而传递进来的对象
该方法创建或实例化的任何对象
对象的任何组件
将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
简单点说,就是利用适配器将不符合自己期望的接口转成自己想要的接口。
对象适配器:
类适配器:
还是先看一下背景:对于客户电脑来说,有一个双孔插头,所以需要一个双孔插座来插上供电,也就是说,需要一个双孔接口(上图中的目标接口)。但是,离你最近的插座只有三孔的,那怎么办呢,把它换成两孔的?花钱到是不重要,重要的是有些电器还要用到三孔插座。所以有个“双孔-三孔适配器”是不是就好了?这个适配器的作用就是让三孔表现出双孔的功能,也就是将三孔(被适配者)适配给双孔(目标接口)。
适配器可以将变化的部分封装起来,这样即使变成四孔插座了也只需修改一下适配器就行了,这样就可以让客户从实现的接口解耦了(对于客户电脑来说,只关心双孔的插座,它只知道适配器有双孔插座,不会察觉到被适配者三孔插座的存在,客户和被适配者就解耦了)。
使用对象组合,以修改的接口包装被适配者(适配器持有被适配者的引用)
类适配器需要多重继承来实现,Java中肯定是不行的。使用多继承代替对象组合。
外观模式(Facade Pattern)
提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
简单点说,就是用一个接口控制各个子系统的接口,从而让客户只用这个高层接口就可以达到目的,不用再逐个操作子系统了,从此简化了接口。
比如说,作为客户的我们想看体验智能家居的看电影功能,我们只需按下遥控器上面的“看电影”按钮即可,系统会自动进行打开投影仪、关闭灯光、打开音响等子系统的行为。
外观模式的根本目的就是简化接口,而适配器模式的根本目的是转换接口。
“最少知识”原则的指导方针:在该对象的方法内,只应该调用以下范围内的方法:
该对象本身
被当作方法的参数而传递进来的对象
该方法创建或实例化的任何对象
对象的任何组件
相关文章推荐
- 《算法导论》中的计数排序的C++实现
- 中介者——对象行为模式
- 【LeetCode】(12)Integer to Roman(Medium)
- Spark之scala
- NSDate
- MS-SQL 删除数据库所有的表
- 解决Gradle DSL method not found: ‘android()’
- IP地址分类,内网和外网的区别
- Winform消除button按下出现的虚线简单实现方法
- DIV背景透明样式使用
- install redis and used in golang on ubuntu 14.04
- 编程软件字体推荐(一)
- 第三性的秘密世界
- C#简单的辅助工具
- css知多少(5)——选择器
- java中只有值传递,没有引用传递
- Eclipse 加速优化
- GDI+什么是ColorMatrix
- 原码、反码、补码和移码其实很简单
- [php] ThinkPHP缓存技术(S(),F(),查询缓存,静态缓存)