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(); } }
适配器模式总结
将目标类 和适配者类解耦,通过使用不同适配器让不兼容的接口变成了兼容,让客户从实现放入接口解耦。增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。
当我们需要使用一个现行的类,但是他的接口并不符合我们需求时,我们可以使用适配器模式。
适配器模式分为类适配器和对象适配器,其中类适配器需要用到多重继承时,也可以使用适配器模式。
相关文章推荐
- java设计模式学习之适配器模式
- java设计模式学习笔记5 适配器模式几种实现方式
- Java设计模式知识学习-----普通工厂模式
- java设计模式学习笔记--适配器模式
- 【知了堂学习笔记】_Java中设计模式之适配器模式的学习
- Java设计模式学习05——适配器模式
- 设计模式学习笔记---适配器模式adapter(Java版)
- Java设计模式知识学习-----装饰者模式
- 知了堂学习笔记--Java设计模式之适配器模式(转)
- java 设计模式学习笔记(13) - 适配器模式
- 【笨鸟先飞】Java重新学习日记20--设计模式之适配器模式
- 设计模式学习笔记--设计模式在Java I/O中的应用(装饰模式和适配器模式)
- Java设计模式学习记录-适配器模式
- Java设计模式知识学习-----命令模式
- java设计模式学习-适配器模式
- java/android 设计模式学习笔记(6)---适配器模式
- java设计模式学习笔记-适配器模式
- Java设计模式知识学习-----观察者模式
- 坐公交车学习(四) Java设计模式之一:适配器模式
- java学习之路--设计模式--适配器模式