您的位置:首页 > 编程语言 > Java开发

Java设计模式知识学习-----适配器模式

2018-01-31 09:32 459 查看

什么是适配器模式

适配器模式:将一个类的接口,转换成客户期望的另一种接口,适配器让原本的接口不兼容的类可以合作无间。

适配器模式使用对象组合,以修改的接口来包装被适配者,那么,被适配的任何子类,都可以搭配着适配器使用。

在适配器模式中,我们需要定义一个包装类,来包装不兼容接口的对象,这个包装类就是适配器,它所包含的对象就是适配者。

适配器提供客户需要的接口,适配器的实现就是将客户的请求转换为适配者相应的接口的引用,也就是说,客户调用适配器的方法,在方法内部中,适配器调用适配者的方法,这就实现了适配者与系统的合作无间。

适配器模式结构类图



适配器模式充满了良好的OO设计原则,就是使用对象组合,以修改的接口包装被适配者,这种方法额外的优点就是,被适配者的任何子类,都可以搭配着适配器使用。

适配器有如下角色:

目标抽象类:Target

适配器类:Adapter

适配者类:Adaptee

客户端:Client

适配器模式实现

实例如下:机器人回说话也会跑,让机器人像小狗一样的叫好跑。

机器人接口如下:

public interface Robot {
public void cry();

public void run();
}


阿尔法狗机器人实现了机器人接口。

public class AlphaGo implements Robot{

@Override
public void cry() {
System.out.println("机器人叫!!!");
}

@Override
public void run() {
System.out.println("机器人跑!!!");
}

}


小狗类如下:

public class Dog {
public void wang(){
System.out.println("小狗叫!!!!");
}
public void move(){
System.out.println("小狗跑!!!");
}
}


小狗类的适配器如下:让机器人像小狗一样的叫和跑。

public class DogAdapter implements Robot{
Dog dog;
public DogAdapter(Dog dog) {  //取得要适配的对象的引用
this.dog = dog;
}
//实现接口中的方法,只需要在相应的方法间进行转换即可完成。
@Override
public void cry() {
System.out.println("机器人模仿狗叫!!!");
dog.wang();

}

@Override
public void run() {
System.out.println("机器人模仿狗跑!!!");
dog.move();

}
}


客户端如下:

public class Client {
public static void main(String[] args) {
AlphaGo alphaGo = new AlphaGo();// 造一个机器人
Dog dog = new Dog();// 造一只狗
Robot dogRobot = new DogAdapter(dog);//将狗包装成机器人
dogRobot.cry();
dogRobot.run();
System.out.println("==============");
alphaGo.cry();
alphaGo.run();
}
}


结果如下:

机器人模仿狗叫!!!
小狗叫!!!!
机器人模仿狗跑!!!
小狗跑!!!
==============
机器人叫!!!
机器人跑!!!


如果要想让机器人像小鸟一样叫和飞,只要添加一个能够飞和叫的鸟类以及一个鸟的适配器即可,如下:

小鸟类如下:

public class Bird {
public void jiji(){
System.out.println("小鸟叫!!!");
}
public void fly(){
System.out.println("小鸟飞!!!");
}
}


小鸟的适配器类如下:

public class BirdAdapter implements Robot{
Bird bird;
public BirdAdapter(Bird bird) {
this.bird = bird;
}
@Override
public void cry() {
bird.jiji();
}

@Override
public void run() {
bird.fly();
}
}


适配器模式总结

将目标类 和适配者类解耦,通过使用不同适配器让不兼容的接口变成了兼容,让客户从实现放入接口解耦。

增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。

当我们需要使用一个现行的类,但是他的接口并不符合我们需求时,我们可以使用适配器模式。

适配器模式分为类适配器和对象适配器,其中类适配器需要用到多重继承时,也可以使用适配器模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: