有的时候我们需要将一套接口和另一套接口对接,这就需要用到适配器模式。
比如有一个鸭子接口:
package com.amaker.app;
public interface Duck {
public voidquack();
public voidfly();
}
然后绿头鸭是鸭子的子类:
package com.amaker.app;
public class MallardDuck implements Duck {
@Override
public voidquack() {
// TODOAuto-generated method stub
System.out.println("Quack");
}
@Override
public voidfly() {
// TODOAuto-generated method stub
System.out.println("I'm flying");
}
}
另外类禽类叫“街头顽禽”大火鸡
public interface Turkey{
public void gobble();
public void fly();
}
火鸡的一个具体实现:
package com.amaker.app;
public class WildTurkey implements Turkey {
@Override
public voidgobble() {
// TODOAuto-generated method stub
System.out.println("Gobble gobble");
}
@Override
public voidfly() {
// TODOAuto-generated method stub
System.out.println("I'm flying a short distance");
}
}
现在这里就有了两套接口,而现在如果我们缺鸭子对象,想用火鸡对象来冒充的话怎么办呢?我们就可以写一个适配器。
1.首先需要实现想转换成的类型接口,这里就是鸭子了。
2.然后需要取得适配的对象的引用,这里通过构造器获取。
3.然后实现接口中的所有方法,这里鸭子的接口里实现火鸡的行为。
package com.amaker.app;
public class TurkeyAdapter implements Duck {
Turkeyturkey;
publicTurkeyAdapter(Turkey turkey) {
super();
this.turkey= turkey;
}
@Override
public voidquack() {
// TODOAuto-generated method stub
turkey.gobble();
}
@Override
public voidfly() {
// TODOAuto-generated method stub
for(int i =0 ; i < 5 ; i ++)
{
turkey.fly();
}
}
}
然后我们写一个测试方法:
package com.amaker.app;
public class DuckTestDrive {
publicstatic void main(String[] args) {
// TODOAuto-generated method stub
MallardDuckduck = new MallardDuck();
WildTurkeyturkey = new WildTurkey();
DuckturkeyAdapter = new TurkeyAdapter(turkey);
System.out.println("The Turkey says...");
turkey.gobble();
turkey.fly();
System.out.println("\nThe Duck says...");
testDuck(duck);
System.out.println("\nThe TurkeyAdapter says...");
testDuck(turkeyAdapter);
}
static voidtestDuck(Duck duck){
duck.quack();
duck.fly();
}
}
上面就是一个适配器的实现。
//---------------------------------------------------------------------------------------------------------------------------------------------------
//在Framework中
有一个FactoryAdapter
public class FactoryMenuAdapter {
//函数都是像下面getProjectID()这样的
/**
* return the project id of system
*
* @param null
* @return project id
*/
public int getProjectID() {
int ret = 0;
try {
ret = mService.getProjectID();
} catch (RemoteException e) {
e.printStackTrace();
}
return ret;
}
}
这样APK调用FactoryAdapter的接口就是了(当然了FactoryAdapter的设计采用单例模式)
mFactoryAdapter = FactoryMenuAdapter.getInstance(mContext_);
int projectID = mFactoryAdapter.getProjectID();
有Adapter这个适配器来封装FacService的一系列接口。这样子,就可以用这个Adapter在把APK和FacService的耦合性降低的同时把两套接口连接起来,apk中看到的只是FactoryAdapter中的那套接口,可以避免下层接口的直接暴露。
比如有一个鸭子接口:
package com.amaker.app;
public interface Duck {
}
然后绿头鸭是鸭子的子类:
package com.amaker.app;
public class MallardDuck implements Duck {
}
另外类禽类叫“街头顽禽”大火鸡
public interface Turkey{
public void gobble();
public void fly();
}
火鸡的一个具体实现:
package com.amaker.app;
public class WildTurkey implements Turkey {
}
现在这里就有了两套接口,而现在如果我们缺鸭子对象,想用火鸡对象来冒充的话怎么办呢?我们就可以写一个适配器。
1.首先需要实现想转换成的类型接口,这里就是鸭子了。
2.然后需要取得适配的对象的引用,这里通过构造器获取。
3.然后实现接口中的所有方法,这里鸭子的接口里实现火鸡的行为。
package com.amaker.app;
public class TurkeyAdapter implements Duck {
}
然后我们写一个测试方法:
package com.amaker.app;
public class DuckTestDrive {
}
上面就是一个适配器的实现。
//---------------------------------------------------------------------------------------------------------------------------------------------------
//在Framework中
有一个FactoryAdapter
public class FactoryMenuAdapter {
//函数都是像下面getProjectID()这样的
/**
* return the project id of system
*
* @param null
* @return project id
*/
public int getProjectID() {
int ret = 0;
try {
ret = mService.getProjectID();
} catch (RemoteException e) {
e.printStackTrace();
}
return ret;
}
}
这样APK调用FactoryAdapter的接口就是了(当然了FactoryAdapter的设计采用单例模式)
mFactoryAdapter = FactoryMenuAdapter.getInstance(mContext_);
int projectID = mFactoryAdapter.getProjectID();
有Adapter这个适配器来封装FacService的一系列接口。这样子,就可以用这个Adapter在把APK和FacService的耦合性降低的同时把两套接口连接起来,apk中看到的只是FactoryAdapter中的那套接口,可以避免下层接口的直接暴露。