1.思考:假如你有两根粗细不一样的水管,但你又想让它们一起通水工作,你该怎么办? 是不是可以通过一个两端大小分别和两根水管相匹配的中间连接物将两根水管连接起来而这个中间连接物就可以称作适配器。
同样,在软件设计中也有适配器,例如有一个类要实现两个功能,而这两个功能又分别在不同的类中,我们就可以把这两个类关联起来,而关联这两个功能的类就可以称作适配器类,该模式也可以成为适配器模式。
2.适配器模式又有类适配器和对象适配器(使用较多)
3.举例说明代码演示:现需要设计一个可以模拟各种动物行为的机器人,在机器人中定义了一系列方法,如机器人叫喊方法cry()、机器人移动方法move()等。如果希望在不修改已有代码的基础上使得机器人能够像狗一样叫,像狗一样跑,使用适配器模式进行系统计。
类适配器:
我们设计一个适配器类,再把机器人设计成一个接口,提供cry(),move(),方法,然后设计一个狗的类,狗的类里面有具体的叫和移动的方法。最后让适配器类继承狗类并实现机器人接口。
public interface robot{
public void cry();
public void move();
}
public class Dog{
public void wangwang(){
System.out.println("汪汪");
}
public void run(){
System.out.println("飞奔");
}
}
public DogAdapter class extends Dog implements Robot {
public void cry(){
System.out.println("机器人学狗叫:");
super.wangwang();
}
public void move(){
System.out.println("机器人学狗跑:");
super.run();
}
}
对象适配器:
public interface Robot{
public void cry();
public void move();
}
public class Dog{
public void wangwang(){
System.out.println("汪汪");
}
public void run(){
System.out.println("飞奔");
}
}
public class DogAdapter implements Robot{
//声明狗类
private Dog dog;
DogAdapter(Dog dog){//利用构造函数把狗对象传进来。
this.dog = dog;
}
cry(){
dog.wangwang();
}
move(){
dog.run();
}
}