前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >适配器模式

适配器模式

作者头像
杨小杰
发布2019-07-04 16:27:14
5280
发布2019-07-04 16:27:14
举报
文章被收录于专栏:JAVA知识总结与分享

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

适配器在现实中的表现:插座转化器,形状拼图等等。
面向对象中的实现:
本文例子:
  • 狗类,兔子类,适配器类,测试类
要求:

1.缺少兔子类对象,先用狗类冒充一下 2.不会让客户调用兔子类的方法,发生改变(例如在客户调用的方法内做判断如果是某个值,去调用狗类的方法,去冒充兔子类)

代码实现:

狗的接口类

代码语言:javascript
复制
 1package com.adapterPattern.dog;
 2
 3/**
 4 * @program: test
 5 * @description: 狗
 6 * @author: Mr.Yang
 7 * @create: 2018-12-15 16:17
 8 **/
 9public interface Dog {
10
11    /**
12     * 狗也会跳,不过没有兔子跳的远
13     */
14    public void  jump();
15
16    /**
17     * 狗会发出汪汪的叫声
18     */
19    public void bark();
20}

项目初始,已经存在的小黑狗类,先用这个顶替一个新的兔子类

代码语言:javascript
复制
 1package com.adapterPattern.dog;
 2
 3/**
 4 * @program: test
 5 * @description: 小黑狗,实现了狗接口的具体类
 6 * @author: Mr.Yang
 7 * @create: 2018-12-15 16:19
 8 **/
 9public class LittleBlackDog implements Dog{
10
11    public void jump() {
12        System.out.println("小黑狗,跳一米");
13    }
14
15    public void bark() {
16        System.out.println("小黑狗,汪汪的叫");
17    }
18}

兔子的接口类

代码语言:javascript
复制
 1package com.adapterPattern.rabbit;
 2
 3/**
 4 * @program: test
 5 * @description: 兔子
 6 * @author: Mr.Yang
 7 * @create: 2018-12-15 16:13
 8 **/
 9public interface Rabbit {
10
11    /**
12     * 兔子拥有跳的方法
13     */
14    public void jump();
15
16    /**
17     * 兔子会咕咕叫
18     */
19    public  void coo();
20}

项目初始,已经存在的兔子类

代码语言:javascript
复制
 1package com.adapterPattern.rabbit;
 2
 3/**
 4 * @program: test
 5 * @description: 兔子
 6 * @author: Mr.Yang
 7 * @create: 2018-12-15 16:13
 8 **/
 9public interface Rabbit {
10
11    /**
12     * 兔子拥有跳的方法
13     */
14    public void jump();
15
16    /**
17     * 兔子会咕咕叫
18     */
19    public  void coo();
20}

适配器类,负责将已经存在的小黑狗先顶替成新的鸭子

代码语言:javascript
复制
 1package com.adapterPattern.adapter;
 2
 3import com.adapterPattern.dog.Dog;
 4import com.adapterPattern.rabbit.Rabbit;
 5
 6/**
 7 * @program: test
 8 * @description: 缺兔子对象,适配器负责将狗类充当为兔子类
 9 * @author: Mr.Yang
10 * @create: 2018-12-15 16:21
11 **/
12public class ActAsRabbitAdapter implements Rabbit {
13    Dog dog;
14
15    public ActAsRabbitAdapter(Dog dog){
16        this.dog=dog;
17    }
18
19    /**
20     * 外部还是调用兔子的方法,内部的实现是狗的跳,狗需要跳两次才和兔子跳的距离一样
21     */
22    public void jump() {
23        dog.jump();
24        dog.jump();
25    }
26    /**
27     * 外部还是调用兔子叫的方法,内部的实现是狗的叫
28     */
29    public void coo() {
30        dog.bark();
31    }
32}

测试类--testRabbit()方法相等于客户之前的调用方法。通过适配器,成功的将新的兔子类给实现了,只不过内部走的是狗的方法。testRabbit()还是正常的调用,不做任何改变。

代码语言:javascript
复制
 1package com.adapterPattern.patternTest;
 2
 3import com.adapterPattern.adapter.ActAsRabbitAdapter;
 4import com.adapterPattern.dog.Dog;
 5import com.adapterPattern.dog.LittleBlackDog;
 6import com.adapterPattern.rabbit.LittleWhiteRabbit;
 7import com.adapterPattern.rabbit.Rabbit;
 8
 9/**
10 * @program: test
11 * @description: 适配器模式测试类
12 * @author: Mr.Yang
13 * @create: 2018-12-15 16:26
14 **/
15public class Test {
16    /**
17     * 负责执行鸭子的跳与叫
18     * @param rabbit
19     */
20    public static  void testRabbit(Rabbit rabbit){
21        rabbit.jump();
22        rabbit.coo();
23    }
24    /**
25     * 负责执行狗的跳与叫
26     * @param dog
27     */
28    public static void testDog(Dog dog){
29        dog.jump();
30        dog.bark();
31    }
32
33    public static void main(String[] args) {
34        //创建一个兔子类
35        Rabbit rabbit = new LittleWhiteRabbit();
36        //创建一个狗类
37        Dog dog = new LittleBlackDog();
38        //创建一个适配器,包装狗类,为兔子类
39        Rabbit adapterRabbit = new ActAsRabbitAdapter(dog);
40
41        System.out.println("----------------------小白兔的跳与叫--------------------");
42        testRabbit(rabbit);
43
44        System.out.println("----------------------小黑狗的跳与叫--------------------");
45        testDog(dog);
46
47        System.out.println("----------------------适配器(相等于兔子)的跳与叫--------------------");
48        //适配实现了兔子接口,所以可以别认为是个兔子,testRabbit()这个方法并不知道这个是适配器
49        testRabbit(adapterRabbit);
50    }
51}

测试结果

代码语言:javascript
复制
 1----------------------兔子的跳与叫--------------------
 2小白兔,跳2米
 3小白兔,在咕咕叫
 4----------------------狗的跳与叫--------------------
 5小黑狗,跳一米
 6小黑狗,汪汪的叫
 7----------------------适配器(相等于兔子)的跳与叫--------------------
 8小黑狗,跳一米
 9小黑狗,跳一米
10小黑狗,汪汪的叫
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA知识总结与分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 适配器在现实中的表现:插座转化器,形状拼图等等。
  • 面向对象中的实现:
  • 本文例子:
  • 要求:
  • 代码实现:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档