开发者社区> 科技小能手> 正文

Java设计模式之适配器模式和外观模式

简介:
+关注继续查看

适配器模式

所谓适配器模式,将一个类的接口,转换为客户所期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
适配器主要组成包括
目标接口:客户端所希望得到的接口
适配器:这个主要就是将被适配器转换为目标接口,一般要实现目标接口,且包含被配饰器成员
被适配器:也就是用来改造的,提供给适配器来转换的,通常要将该被适配器绑定传入到适配器中,让适配器得以转换。
一般这种模式就是在不修改现有代码的情况下,将一个接口转换为另一个接口。它主要包含两种方式:
对象适配器:
这种就是在适配器中利用了组合来处理,将被适配器作为适配器的一个成员属性,而且适配器则就实现或者继承客户所需要的目标接口
代码实例:
假如有一个小狗和小猫的两个接口,现在客户需要小猫,可是只有小狗接口,则就可以利用适配器来转换。
这里只写出适配器代码:
package test;
publicclass AnimalAdapter implements Cat{
private Dog dog;//被适配器
public AnimalAdapter(Dog dog)
{
this.dog=dog;
}

publicvoid mimi() {
dog.wow();
}
publicvoid run() {
dog.run();
}

publicvoid sleep() {
dog.sleep();
}
}

外观模式
所谓外观模式,就是提供一个统一接口,用来访问子系统中的一群接口。它定义了一个高层接口,让子系统更容易使用。
外观模式并没有封装了子系统的类,外观只是提供了更简化的接口,它里面仍然包含着子系统中各个接口的对象,并且利用组合将子系统的所有接口来包含起来。它不仅提供了一个简化接口,而且依然将系统完整的功能暴露出来。
代码实例
假设你要回家,回家进入屋里有各种各样的操作,此时就可以将这一系列操作看着一个子系统。可以简化该所有操作。
外观模式
package test;

import com.whut.command.Light;

publicclass Facede {
//等各种子系统的操作
private Light light;
private Door door;
private Window window;

publicvoid goHome()
{
light.on();
door.open();
window.open();
}

}
适配器模式将一个或者多个类接口变成客户所期望的接口,并不是转换一个接口。
外观模式也可以只针对一个拥有复杂接口的类提供简化的接口。
适配器模式设计的意图主要就是让现有接口改变成符合顾客所期望的接口
外观模式的意图就是将一个复杂的子系统的所有接口简化,以提供一个便利方便的接口来给客户
设计模式原则:
最少知识原则,减少对象之间的交互,只留下几个“密友”。
要想遵循这个原则一般我们应该只调用属于以下范围的方法:
1 该对象的本身
2 被当做方法的参数而传递进来的对象
3 此方法所创建或实例化的任何对象
4 对象的任何组件,即该对象内部的所有成员变量或者方法
不要调用当某对象是调用其他方法后返回的结果。
两个模式总结:
1)当需要使用一个现有的类但是其接口并不符合你的需要时,可以用适配器模式
2)当需要简化并且统一一个很大的接口或者一群复杂的接口时候
3)适配器改变接口以使其符合客户的期望
4)外观将客户从一个复杂的子系统中解耦

5)适配器将一个对象包装起来以改变其接口。

装饰者将一个对象包装起来用来增加新的行为和责任。外观将一群对象包装起来以简化其接口。



本文转自 zhao_xiao_long 51CTO博客,原文链接:http://blog.51cto.com/computerdragon/1165985

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JAVA设计模式—适配器模式,装饰模式,代理模式异同
JAVA设计模式—适配器模式,装饰模式,代理模式异同
32 0
设计模式之十(外观模式)
原文:设计模式之十(外观模式) 前言 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一系统更加容易使用. 结构图 SubSystem  Class 子系统类集合 实现子系统的功能,处理Facade对象指派的任务,注意子类中没有Facade的任何信...
878 0
Java描述设计模式(12):外观模式
本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景 1、场景描述 在移动互联网没有普及之前,去饭店吃饭的流程大致如下:选座位,排队,点菜,结账。后来移动互联网普及,通过手机APP就可以操作这些流程,非常的方便快捷:通过手机可以知道某饭店是不是还有空位,到了饭店之后直接入座,然后通过手机点菜,结账,中间省去了很多繁琐的流程。
6329 0
OKHTTP3源码和设计模式(上篇)
本文来探究一下 OkHttp3 的源码和其中的设计思想。 关于 OkHttp3 的源码分析的文章挺多,不过大多还是在为了源码而源码。
1843 0
【设计模式】外观模式 ( 概念 | 适用场景 | 优缺点 | 代码示例 )
【设计模式】外观模式 ( 概念 | 适用场景 | 优缺点 | 代码示例 )
38 0
JAVA设计模式(3)外观模式(门面模式)
2019年阿里云双11活动拼团:https://www.aliyun.com/1111/2019/group-buying-share 针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。
640 0
IOS设计模式第六篇之适配器设计模式
版权声明:原创作品,谢绝转载!否则将追究法律责任。 那么怎么使用适配器设计模式呢? 这个之前提到的水平滚动的视图像这样: 为了开始实现他,我们创建一个新的继承与UIView的HorizontalScroller 类。
873 0
23704
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载