您的位置:首页 > 其它

设计模式——适配器

2014-08-16 20:06 113 查看
又分为三种:

类的适配器模式:

package designpattern.structure.adapter.classadapter;

public interface ITarget {

public void method1();

public void method2();
}

package designpattern.structure.adapter.classadapter;

public class Source {

public void method1() {
System.out.println("Source.method1()");
}

}

package designpattern.structure.adapter.classadapter;

public class SourceAdapter extends Source implements ITarget {

public void method2() {
System.out.println("Adapter.method2()");
}

}

package designpattern.structure.adapter.classadapter;

/*
*
* 类的适配模式:
* 即想让没有实现ITarget接口的Source类为 ITarget 工作
* ———— 具体来说是想让ITarget在适当时候调用Source , 别的时候,则不需要(别的时候通过适配来工作)
*
*/
public class Client {

/**
* @param args
*/
public static void main(String[] args) {

ITarget target = new SourceAdapter();
target.method1();
target.method2();
}

}


对象的适配器模式:

package designpattern.structure.adapter.objectadapter;

public interface ITarget {

public void method1();

public void method2();
}

package designpattern.structure.adapter.objectadapter;

public class Source {

public void method1() {
System.out.println("Source.method1()");
}

}

package designpattern.structure.adapter.objectadapter;
public class Wrapper implements ITarget {

private Source source;

public Wrapper(Source source){
super();
this.source = source;
}

public void method2() {
System.out.println("this is the wrapped method!");
}

public void method1() {
source.method1();
}
}

package designpattern.structure.adapter.objectadapter;

/*
*
* 类的适配模式:
* 即想让没有实现ITarget接口的Source类为 ITarget 工作
* ———— 具体来说是想让ITarget在适当时候调用Source , 别的时候,则不需要(别的时候通过适配来工作)
*
*/
public class Client {

/**
* @param args
*/
public static void main(String[] args) {

ITarget target = new Wrapper(new Source());
target.method1();
target.method2();
}

}


接口的适配器模式:

package designpattern.structure.adapter.interfaceadapter;

public interface ITarget {

public void method1();

public void method2();
}

package designpattern.structure.adapter.interfaceadapter;
public abstract class Wrapper implements ITarget {

public void method2() {  ----- 钩子方法实现!! 一般表明暂时不想去实现
}

public void method1() {
}
}

package designpattern.structure.adapter.interfaceadapter;

public class Sub1 extends Wrapper {

public void method1() {
System.out.println("Sub1.method1()");
}

}
package designpattern.structure.adapter.interfaceadapter;

public class Sub2 extends Wrapper {

public void method2() {
System.out.println("Sub2.method2()");
}

}

package designpattern.structure.adapter.interfaceadapter;

/*
*
* 接口的适配模式:
*
*/
public class Client {

/**
* @param args
*/
public static void main(String[] args) {

ITarget target = new Sub1();
target.method1();
target.method2();

target = new Sub2();
target.method1();
target.method2();

}

}


总结:

其实,它主要是为了使不兼容的两个(多个?)接口/类一起工作。

——一起工作的意思是说,调用A接口方法m1的时候,我想实际调用B类的m1实现——B类必须有m1(就是说A接口的其中一个方法),否则也无需适配,直接重新实现A接口就行了?不是吗?

—— 接口可以有很多方法,但是目标类必须有它其中一个实现,—— 这样才能适配啊!!

—— 可以通过添加Adapter、Wrapper包装类来实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: