适配器模式是就和现实一个样子,给你一个电脑适配器,它就能提供给你一个电源使用的稳定电压,不管外界是多少F,它的输出电压是不变的。
适配器模式分为4个部分
1.功能适配器(定义必须要用接口)
2.对象适配器(进行转换)
3.目标适配对象
4.源适配对象
如图,使用适配器之后,系统对待外来数据和内部数据没啥两样不用做任何更改。
下面就以抓取度娘和谷哥的网页数据来牛刀小试一把。
IHtml 类适配器
BaiduHtmlAdapter、GoogleHtmlAdapter 对象适配器
Html 目标适配对象
BaiduHtml、GoogleHtml 源适配对象
IHtml
package j2se.pattern;
/**
* class Adapter
* @author Lyon Yao
*
*/
public interface IHtml {
public abstract String getTitle();
public abstract String getBody();
}
Html
package j2se.pattern;
/**
* target object
* @author Lyon Yao
*
*/
public class Html implements IHtml {
private String title;
private String body;
/* (non-Javadoc)
* @see j2se.pattern.IHtml#getTitle()
*/
@Override
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
/* (non-Javadoc)
* @see j2se.pattern.IHtml#getBody()
*/
@Override
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
}
GoogleHtml
package j2se.pattern;
import java.util.HashMap;
/**
* source object
* @author Lyon Yao
*
*/
public class GoogleHtml {
protected HashMap<String, Object> data=new HashMap<String, Object>();
public void setTitle(String title){
data.put("title",title);
}
public void setBody(String body){
data.put("body",body);
}
}
BaiduHtml
package j2se.pattern;
/**
* source object
* @author Lyon Yao
*
*/
public class BaiduHtml {
protected String[] data=new String[2];
public void setTitle(String title){
data[0]=title;
}
public void setBody(String body){
data[1]=body;
}
}
GoogleHtmlAdapter
package j2se.pattern;
/**
* object Adapter
* @author Lyon Yao
*
*/
public class GoogleHtmlAdapter extends GoogleHtml implements IHtml {
public GoogleHtmlAdapter(GoogleHtml googleHtml) {
// TODO Auto-generated constructor stub
super.data=googleHtml.data;
}
@Override
public String getTitle() {
// TODO Auto-generated method stub
return super.data.get("title").toString();
}
@Override
public String getBody() {
// TODO Auto-generated method stub
return super.data.get("body").toString();
}
}
BaiduHtmlAdapter
package j2se.pattern;
/**
* object Adapter
* @author Lyon Yao
*
*/
public class BaiduHtmlAdapter extends BaiduHtml implements IHtml{
public BaiduHtmlAdapter(BaiduHtml baiduHtml) {
// TODO Auto-generated constructor stub
super.data=baiduHtml.data;
}
@Override
public String getTitle() {
// TODO Auto-generated method stub
return super.data[0];
}
@Override
public String getBody() {
// TODO Auto-generated method stub
return super.data[1];
}
}
App
package j2se.pattern;
import java.util.ArrayList;
/**
* Client
* @author Lyon Yao
*
*/
public class App {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
java.util.List<IHtml> list=new ArrayList<IHtml>(0);
Html html=new Html();
html.setTitle("this is our html");
list.add(html);
GoogleHtml googleHtml=new GoogleHtml();
googleHtml.setTitle("this is googleHtml");
GoogleHtmlAdapter googleHtmlAdapter=new GoogleHtmlAdapter(googleHtml);
list.add(googleHtmlAdapter);
BaiduHtml baiduHtml=new BaiduHtml();
baiduHtml.setTitle("this is baiduHtml");
BaiduHtmlAdapter baiduHtmlAdapter=new BaiduHtmlAdapter( baiduHtml);
list.add(baiduHtmlAdapter);
for(IHtml iHtml:list){
System.out.println(iHtml.getTitle());
}
}
}
呵呵,大功告成,运行一下看看是不是没有什么问题吧?我们的App只抓title 没做任何更改。
- 大小: 12.3 KB
分享到:
相关推荐
设计模式之适配器模式(Adapter Pattern) 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Head First 设计模式 (七) 适配器模式(Adapter pattern) C++实现
8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、命令模式COMMAND PATTERN 13、装饰模式DECORATOR PATTERN 14、迭代器模式...
- **Adapter(适配器)**:这是实现目标接口并含有适配者实例的类。适配器的作用是将适配者的接口转换为目标接口。 2. **工作原理**: - 适配器模式通过引入一个中间层即适配器来解决两个不同接口之间的兼容性问题...
适配器模式(Adapter Pattern) 是作为两个不兼容接口之间的桥梁, 这种类型的设计模式属于结构型模式。 一些书籍也称适配器模式为缺省适配器模式(Default Adapter Pattern) 。 适配器模式主要分 为三类: 类...
NULL 博文链接:https://lym6520.iteye.com/blog/713094
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个...
.NET设计模式(8):适配器模式(AdapterPattern)
java设计模式之适配器模式,希望对大家有所帮助。
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个...
用c++方法实现AdapterPattern模式
本文实例讲述了Python设计模式之...适配器模式(Adapter Pattern):将一个类的接口转换成为客户希望的另外一个接口.Adapter Pattern使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 应用场景:系统数据和
适配器模式(Adapter Pattern) 提供者模式(Provider Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 原型模式(Prototype Pattern) 责任链模式(Chain of Responsibility Pattern) 中介者模式...
适配器模式[ADAPTER PATTERN] 模板方法模式[TEMPLATE METHOD PATTERN] 建造者模式[BUILDER PATTERN] 策略模式 代理模式 单例模式 多例模式 工厂方法模式 抽象工厂模式 门面模式 适配器模式 模板方法模式 建造者模式...
适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式...
适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式...
7. 适配器模式 (Adapter Pattern) 8. 模板方法模式 (Template Pattern) 9. 建造者模式 (Builder Pattern) 10. 原型模式 (Prototype Pattern) 11. 组合模式 (Composite Pattern) 12. 装饰者模式 ...
适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. ...
适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 组合模式(Composite Pattern) 装饰者模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) ...