Java设计模式:Adapter适配器模式

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/88715534

目标是把Source的功能拓展到Targetable中去。需要一个适配器Adapter完成。


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

public interface Targetable {
	void method1();
	void method2();
}

public class Adapter extends Source implements Targetable {  
  
    @Override  
    public void method2() {  
        System.out.println("Adapter method2");  
    }  
}  

测试:

public class Test {
	public static void main(String[] args) {
		try {
			Test test = new Test();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Test() {
		Targetable target = new Adapter();  
        target.method1();  
        target.method2();  
	}
}

或者有时候会把Source的对象引用埋入到一个适配器(wrap),适配器模式的变形:


public class Wrapper implements Targetable {
	private Source source;

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

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

	@Override
	public void method2() {
		System.out.println("Wrapper method2");
	}
}
	public Test() {
		Source source = new Source();
		Targetable target = new Wrapper(source);
		target.method1();
		target.method2();
	}

下面是接口的适配器模式。

有时候,我们使用或者感兴趣的是一个接口类中的某一两个函数,而不是全部,但是如果我们实现这个接口类,则必须实现全部的函数,显然这比较繁琐,可以简化。


public interface Sourceable {
	void method1();
	void method2();
}

public abstract class Wrapper implements Sourceable {
	@Override
	public void method1() {
	}

	@Override
	public void method2() {
	}
}

public class Source1 extends Wrapper{
	@Override
	public void method1(){  
        System.out.println("Source1 method1");  
    }  
}

public class Source2 extends Wrapper{
	@Override
	public void method2() {
		System.out.println("Source2 method2");
	}
}
	public Test() {
		Sourceable source1 = new Source1();
		Sourceable source2 = new Source2();

		source1.method1();
		source1.method2();

		source2.method1();
		source2.method2();
	}

输出:

Source1 method1
Source2 method2

猜你喜欢

转载自blog.csdn.net/zhangphil/article/details/88715534