Adapter Pattern:将一个类的接口,转换成客户所期望的另一个接口。
1).
Target.java
package com.flyingh.target;
public interface Target {
void request();
}
Adaptee.java
package com.flyingh.adaptee;
public class Adaptee {
public void specificRequest() {
// TODO Auto-generated method stub
System.out.println("specific request!");
}
}
Adapter.java
package com.flyingh.adapter;
import com.flyingh.adaptee.Adaptee;
import com.flyingh.target.Target;
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}
@Override
public void request() {
// TODO Auto-generated method stub
adaptee.specificRequest();
}
}
Client.java
package com.flyingh.client;
import com.flyingh.adaptee.Adaptee;
import com.flyingh.adapter.Adapter;
import com.flyingh.target.Target;
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target adapter = new Adapter(adaptee);
adapter.request();
}
}
程序运行结果如下:
specific request!
2).将Iterator适配成Enumeration,并用Set测试:
IteratorAdapter.java
package com.flyingh.adapter;
import java.util.Enumeration;
import java.util.Iterator;
public class IteratorAdapter<E> implements Enumeration<E> {
private Iterator<E> iterator;
public IteratorAdapter(Iterator<E> iterator) {
super();
this.iterator = iterator;
}
@Override
public boolean hasMoreElements() {
// TODO Auto-generated method stub
return iterator.hasNext();
}
@Override
public E nextElement() {
// TODO Auto-generated method stub
return iterator.next();
}
}
Client.java
package com.flyingh.client;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import com.flyingh.adapter.IteratorAdapter;
public class Client {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("zhangsan");
set.add("lisi");
set.add("wangwu");
set.add("zhaoliu");
set.add("sunqi");
set.add("qianba");
System.out.println("**********directly*********");
System.out.println(set);
System.out.println("**********foreach(iterator)**********");
for (String string : set) {
System.out.print(string + " ");
}
System.out.println("\n********iterator***********");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.print(iterator.next() + " ");
}
System.out.println("\n********enumeration********");
iterator = set.iterator();
Enumeration<String> enumeration = new IteratorAdapter<String>(iterator);
while (enumeration.hasMoreElements()) {
System.out.print(enumeration.nextElement() + " ");
}
}
}
程序运行结果如下:
**********directly*********
[zhaoliu, sunqi, wangwu, qianba, lisi, zhangsan]
**********foreach(iterator)**********
zhaoliu sunqi wangwu qianba lisi zhangsan
********iterator***********
zhaoliu sunqi wangwu qianba lisi zhangsan
********enumeration********
zhaoliu sunqi wangwu qianba lisi zhangsan
3).Default Adapter:
Target.java
package com.flyingh.target;
public interface Target {
void fun1();
void fun2();
void fun3();
void fun4();
void fun5();
}
Adapter.java
package com.flyingh.adapter;
import com.flyingh.target.Target;
public abstract class Adapter implements Target {
@Override
public void fun1() {
// TODO Auto-generated method stub
}
@Override
public void fun2() {
// TODO Auto-generated method stub
}
@Override
public void fun3() {
// TODO Auto-generated method stub
}
@Override
public void fun4() {
// TODO Auto-generated method stub
}
@Override
public void fun5() {
// TODO Auto-generated method stub
}
}
Adaptee.java
package com.flyingh.adaptee;
import com.flyingh.adapter.Adapter;
public class Adaptee extends Adapter {
@Override
public void fun2() {
// TODO Auto-generated method stub
System.out.println("fun2()");
}
@Override
public void fun3() {
// TODO Auto-generated method stub
System.out.println("fun3()");
}
}
Client.java
package com.flyingh.client;
import com.flyingh.adaptee.Adaptee;
import com.flyingh.target.Target;
public class Client {
public static void main(String[] args) {
Target adaptee = new Adaptee();
adaptee.fun2();
adaptee.fun3();
}
}
程序运行结果如下:
fun2()
fun3()