看java思想的第九章--接口,讲的好杂,讲到了两个设计模式
策略设计模式(比较常用)
适配器设计模式
适配器设计模式我理解了半天,也不算完全理解
是在不修改两个代码块的情况下,将两个不兼容的类融合在一起,像是一个转换器,通过转换将他们可以协作起来.
这是适配器模式的类图,有三个重要角色:目标接口,被适配者,适配器.想组合在一起的是目标接口和被适配者,可以达到将被适配者可以向上转型成目标接口的类型.不改变原来代码块的情况下,通过适配器将他们组合到一起.
适配器的几种模式:类适配器,对象适配器,接口适配器
1.类适配器(通过继承来实现适配器功能)
我们想要访问A接口,A接口中没有我们想要的方法,但是B接口中有(也可以是一个已经存在的类).在不能改变A接口的情况下,我们要创建一个中间件C.让C来实现A接口,我们就可以继续访问A接口中的方法了(这并不是我们想访问的),让C继承B的实现类BB,就可以在重写A的方法中直接调用继承而来的方法,从而实现一个简单的适配.
目标接口
public interface Target{
void TargetdoSomething();
}
被适配者
public class Adaptee {
public void AdapteedoSomething(){
System.out.println("Adaptee do something");
}
}
适配器()
public class Adapter extends Adaptee implements Target {
@Override
public void TargetdoSomething(){
AdapteedoSomething();
}
}
测试方法
public class Test(){
public static void main(String[] args) {
Target target = new Adapter();
target.TargetdoSomething();
}
}
输出结果
Adaptee do something
2.对象适配器(通过组合来实现适配器功能)
我们想要访问A接口,A接口中没有我们想要的方法,但是B接口中有(也可以是一个已经存在的类).在不能改变A接口的情况下,我们要创建一个中间件C.让C来实现A接口,我们就可以继续访问A接口中的方法了(这并不是我们想访问的),在C中引用实现B接口的BB对象,通过C的构造器接收这个对象,在重写A的方法中使用BB对象来调用我们想要的方法,来实现一个简单的适配器.
目标接口
public interface Target{
void TargetdoSomething();
}
被适配者
public class Adaptee {
public void AdapteedoSomething(){
System.out.println("Adaptee do something");
}
}
适配器
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee){
this.adaptee = adaptee;
}
@Override
public void TargetdoSomething(){
adaptee.AdapteedoSomething();
}
}
测试方法
public class Test(){
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter(adapter);
target.TargetdoSomething();
}
}
输出结果
Adaptee do something
3.接口适配器(通过抽象类来实现适配,这种适配稍别于上面所述的适配)
实现一个接口,只想实现接口中个别方法,如果实现接口就要实现接口中所有的方法,对不需要的方法进行置空.但是会使代码显得臃肿.通过抽象类实现该接口,再去继承这个抽象类就只需要重写我们需要的方法就行了.这个抽象类就可作为中间适配器.
目标接口
public interface Target {
void A();
void B();
void C();
void D();
void E();
}
适配器
public abstract class Adapter implements Target {
public void A(){};
public void B(){};
public void C(){};
public void D(){};
public void E(){};
}
被适配对象
public class Adaptee extends Adapter {
public void A() {
System.out.println("I'm A");
}
public void D() {
System.out.println("I'm D");
}
}
测试方法
public class Test {
public static void main(String[] args) {
Target target = new Adaptee();
target.A();
target.D();
}
}
测试结果
I'm A
I'm D
文章参考http://www.cnblogs.com/V1haoge/p/6479118.html点击打开链接