使用Adapter(适配器)模式兼容原本不兼容

这个模式有些模糊,作用就是匹配二者不同,其实通过修改代码可以更简洁的实现修改,但是问题出在如果不能修改代码的时候,我们应该怎么办?

先看看代码,首先是2个接口:

package moshi.adapter;

public interface SayGood {

	public void sayGood();
	
}


package moshi.adapter;

public interface SayHello {

	public void sayHello();
	
}


一个Hello,一个Good。下面2个代码分别实现它们:

package moshi.adapter;

public class SayGoodImp implements SayGood {

	public void sayGood() {
		System.out.println("Goog");

	}

}


package moshi.adapter;

public class SayHelloImp implements SayHello {

	public void sayHello() {
		System.out.println("Hello");
	}

}


怎么样让SayGood里也能说sayHello?我们可以改代码。

package moshi.adapter;

public class SayGoodImp implements SayGood,SayHello{

	public void sayGood() {
		System.out.println("Goog");

	}

	public void sayHello() {
		System.out.println("Hello");
		
	}

}


我们让这个类实现这2个接口,问题解决,但是如果强制我们不修改SayGoodImp类的代码怎么办?我们就不能实现SayHello这个接口了。我们只能写个Adapter(适配器)。

package moshi.adapter;

public class SayGoodApapter implements SayHello {

	//定义SayHello引用
	private SayHello sayHello;
	
	//进行初始化注入
	public SayGoodApapter(SayHello sayHello){
		this.sayHello=sayHello;
	}
	//转移依赖性
	public void sayHello() {
		sayHello.sayHello();
	}
	
}


哈哈,其实也就是变相的改代码。转移一下依赖性。OK,看看怎么使用:

package moshi.adapter;

public class TestSayGood {

	public static void main(String[] args) {
		
		SayGoodApapter SayGoodApapter=new SayGoodApapter(new SayHelloImp());
		SayGoodApapter.sayHello();
	
	}

}


呵呵,把SayHello注入到SayGoodApapter类中。这个时候SayGood也能说声SayHello了。你还费解不?


你可能感兴趣的:(java)