package GeneIterAdaptReflect.com;
/*
* 举例:
* 用电器做例子,笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只
* 有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑无法使用。这时候一个三相到两相的转换器
* (适配器)就能解决此问题,而这正像是本模式所做的事情。
* 适配器:
* 将“源”通过适配器和“目标”链接上;使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
* 适配是为了实现某种目的在不破坏源类的结构上而为一个源类暂时加上某种方法,
* 适配器中的角色:
* 1.目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口
* 2.需要适配的类(Adaptee):需要适配的类或适配者类
* 3.适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口
* 适配器模式:
* 面向类的适配器模式(采用的是继承)
* Adapter类继承了Adaptee类实现Target接口,而在Java这种单继承的语言,他不可能再去继承其他的类
* 了,这样也就是这个适配器只为Adaptee这一个类服务。所以称其为类适配模式。
* 面向对象的适配器模式;(采用的是组合形式)
* Adapter类实现Target接口 在其Adapter的构造方法中 传入Adaptee类的引用;
* 默认适配器:(不经常用这里只做简单说明)
* 当你想实现一个接口但又不想实现接口中所有的方法,只想去实现一部分方法时,就用中默认的适配器模式,
* 他的方法是在接口和具体实现类中添加一个抽象类,而用抽象类去空实现目标接口的所有方法。而具体的实现类只需要覆盖其需要完成的方法即可
* class abstract Adapter implements Target{}
* class Adaptee extends Adapter{//实现需要的方法接口}
*
*
* */
//1.目标接口:
interface Job {
public abstract void speakJapanese();
public abstract void speakEnglish();
public abstract void speakFrench();
}
//2.需要适配的类
class Person {
public void speakJapanese(){
System.out.println("I can speak Japanese!");
}
public void speakEnglish(){
System.out.println("I can speak English!");
}
}
//3.适配器类(类适配器模式)
class Adapter extends Person implements Job{
@Override
public void speakFrench() {
System.out.println("I can speak french");
}
}
//适配器类(对象适配器模式)
class Adapter2 implements Job {
//采用组合的形式,在适配器类的构造方法中就传入一个person引用;
private Person person = null;
public Adapter2(Person person) {
this.person = person;
}
public void speakEnglish() {
person.speakEnglish();
}
public void speakJapanese() {
person.speakJapanese();
}
//new add
public void speakFrench() {
System.out.println("I can speak french");
}
}
public class AdapterTest {
public static void main(String[] args) {
//Adapter ada = new Adapter();
Adapter2 ada = new Adapter2(new Person());
ada.speakEnglish();
ada.speakFrench();
ada.speakJapanese();
}
}
java: 四器 之 适配器初学
最新推荐文章于 2023-06-29 21:19:37 发布