適配器模式通過接口和繼承的方式來實現在適配類中調用目標類。
- 類適配器
public class ClassAdapterTest {
public static void main(String[] args) {
System.out.println("類適配器模式測試:");
//面向接口編程
Target target = new ClassAdapter();
target.request();
}
}
public interface Target {
void request();
}
public class Adaptee {
void specificRequest(){
System.out.println("適配者中的業務代碼被調用");
}
}
public class ClassAdapter extends Adaptee implements Target {
@Override
public void request(){
super.specificRequest();
}
}
- 對象適配器
public class ObjectAdapterTest {
public static void main(String[] args) {
System.out.println("對象適配器模式測試:");
//面向接口編程
Adaptee adaptee = new Adaptee();
Target target = new ObjectAdapter(adaptee);
target.request();
}
}
public interface Target {
void request();
}
public class Adaptee {
void specificRequest(){
System.out.println("適配者中的業務代碼被調用");
}
}
public class ObjectAdapter implements Target {
Adaptee adaptee;
ObjectAdapter(Adaptee adaptee){
this.adaptee=adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
}
- 默認適配器
public class DefaultAdapterTest {
public static void main(String[] args) {
/*
默認適配器
*/
DefaultAdapterSub1 sub1 = new DefaultAdapterSub1();
DefaultAdapterSub2 sub2 = new DefaultAdapterSub2();
sub1.operation1();
System.out.println("----------");
sub1.operation2();
System.out.println("----------");
sub2.operation1();
System.out.println("----------");
sub2.operation2();
}
}
public interface Target {
void operation1();
void operation2();
}
public abstract class DefaultAdapter implements Target{
@Override
public void operation1() {
}
@Override
public void operation2() {
}
}
public class DefaultAdapterSub1 extends DefaultAdapter{
@Override
public void operation1() {
System.out.println("重寫了operation1方法");
}
}
public class DefaultAdapterSub2 extends DefaultAdapter{
@Override
public void operation2() {
System.out.println("重寫了operation2方法");
}
}
- 雙向適配器
public class ObjectAdapterTest {
public static void main(String[] args) {
System.out.println("目標通過雙向適配器訪問適配者:");
//面向接口編程
TwoWayAdaptee adaptee = new AdapteeRealize();
TwoWayTarget target = new TwoWayAdapter(adaptee);
target.request();
System.out.println("-------------------");
System.out.println("適配者通過雙向適配器訪問目標:");
target = new TargetRealize();
adaptee = new TwoWayAdapter(target);
adaptee.specificRequest();
}
}
public interface TwoWayTarget {
void request();
}
public interface TwoWayAdaptee {
void specificRequest();
}
public class TargetRealize implements TwoWayTarget {
@Override
public void request() {
System.out.println("目標代碼被調用!");
}
}
public class AdapteeRealize implements TwoWayAdaptee {
@Override
public void specificRequest() {
System.out.println("適配者代碼被調用!");
}
}
public class TwoWayAdapter implements TwoWayTarget, TwoWayAdaptee {
private TwoWayTarget target;
private TwoWayAdaptee adaptee;
public TwoWayAdapter(TwoWayTarget target) {
this.target = target;
}
public TwoWayAdapter(TwoWayAdaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
adaptee.specificRequest();
}
@Override
public void specificRequest() {
target.request();
}
}