文档章节

设计模式-适配器模式

月夜筱风
 月夜筱风
发布于 2017/09/04 15:38
字数 476
阅读 8
收藏 0

一,定义

输入图片说明

为了在已有的功能上做拓展的方法

二,代码

  • 2.1,目录

输入图片说明

  • 2.2,代码详情
package com.boot.lijunhao.shipeiqi;

import lombok.extern.slf4j.Slf4j;

/**
 * Created by lijunhao on 2017/9/4.
 */
@Slf4j
public class ListenMedia {

    private String name;

    public ListenMedia(String name) {
        this.name = name;
    }

    public void runMedia(){
        if("MP3".equals(name)){
            log.info("runMedia在类(ListenMedia.java:23)行:{}","播放MP3!(old)");
        }else if("MP4".equals(name)){
            log.info("runMedia在类(ListenMedia.java:25)行:{}","播放MP4!(old)");
        }else{
            //现在要做拓展,表示并不想在这里再增加一堆if else,再就是为了以后能拓展
            NewMediaContent newMediaContent = new NewMediaContent(name);
            newMediaContent.runMedia();
        }
    }

}

package com.boot.lijunhao.shipeiqi;

import lombok.extern.slf4j.Slf4j;

/**
 *
 * 抽象的媒体播放类
 * Created by lijunhao on 2017/9/4.
 */
@Slf4j
public abstract class AbsMeida {

    void runMedia(){
      log.info("runMedia在类(AbsMeida.java:14)行:{}","默认没有实现的播放类型");
        }
}

package com.boot.lijunhao.shipeiqi;

import lombok.extern.slf4j.Slf4j;

/**
 * Created by lijunhao on 2017/9/4.
 */
@Slf4j
public class IpadMedia extends AbsMeida {
    @Override
    public void runMedia() {
      log.info("runMedia在类(IpadMedia.java:12)行:{}","播放ipad!(new)");
    }
}

package com.boot.lijunhao.shipeiqi;

import lombok.extern.slf4j.Slf4j;

/**
 * Created by lijunhao on 2017/9/4.
 */
@Slf4j
public class IphoneMedia extends AbsMeida {
    @Override
    public void runMedia() {
        log.info("runMedia在类(IphoneMedia.java:12)行:{}","播放iphone!(new)");
    }
}

package com.boot.lijunhao.shipeiqi;

import lombok.extern.slf4j.Slf4j;

/**
 * Created by lijunhao on 2017/9/4.
 */
@Slf4j
public class NewMediaContent {

    private AbsMeida absMeida;

    public NewMediaContent(String name) {

        if("IPAD".equals(name)){
            this.absMeida = new IpadMedia();
        }else if("IPHONE".equals(name)){
            this.absMeida = new IphoneMedia();
        }else{
            this.absMeida =new AbsMeida() {
                @Override
                void runMedia() {
                    super.runMedia();
                }
            };
        }
    }

    public void runMedia(){
        absMeida.runMedia();
    }

}

package com.boot.lijunhao.shipeiqi;

/**
 *
 * 案例分析:以前的社会只有MP3和MP4,现在随着时代的发展出现了ipad和iphone,为了少改代码,使用了适配器模式
 *
 * Created by lijunhao on 2017/9/4.
 */
public class Start {

    public static void main(String[] args) {
        ListenMedia listenMedia = new ListenMedia("MP3");
        listenMedia.runMedia();
        ListenMedia listenMedia2 = new ListenMedia("MP4");
        listenMedia2.runMedia();
        ListenMedia listenMedia3 = new ListenMedia("IPAD");
        listenMedia3.runMedia();
        ListenMedia listenMedia4 = new ListenMedia("IPHONE");
        listenMedia4.runMedia();
        ListenMedia listenMedia5 = new ListenMedia("IPHONE333");
        listenMedia5.runMedia();
    }

}

  • 2.3,结果
15:21:06.873 [main] INFO com.boot.lijunhao.shipeiqi.ListenMedia - runMedia在类(ListenMedia.java:23)行:播放MP3!(old)
15:21:06.889 [main] INFO com.boot.lijunhao.shipeiqi.ListenMedia - runMedia在类(ListenMedia.java:25)行:播放MP4!(old)
15:21:06.889 [main] INFO com.boot.lijunhao.shipeiqi.IpadMedia - runMedia在类(IpadMedia.java:12)行:播放ipad!(new)
15:21:06.889 [main] INFO com.boot.lijunhao.shipeiqi.IphoneMedia - runMedia在类(IphoneMedia.java:12)行:播放iphone!(new)
15:21:06.889 [main] INFO com.boot.lijunhao.shipeiqi.AbsMeida - runMedia在类(AbsMeida.java:14)行:默认没有实现的播放类型

© 著作权归作者所有

共有 人打赏支持
月夜筱风
粉丝 0
博文 55
码字总数 19574
作品 0
闵行
程序员

暂无文章

[Hive]JsonSerde使用指南

注意: 重要的是每行必须是一个完整的JSON,一个JSON不能跨越多行,也就是说,serde不会对多行的Json有效。 因为这是由Hadoop处理文件的工作方式决定,文件必须是可拆分的,例如,Hadoop将在...

Mr_yul
10分钟前
0
0
54:mysql修改密码|连接mysql|mysql常用命令

1、mysql修改密码: root用户时mysql的超级管理员,默认mysql的密码是空的,直接可以连接上去的,不过这样不安全; 注释:为了方便的使用mysql,需要把mysql加入到环境变量里; #后续自己输入mys...

芬野de博客
17分钟前
0
0
鼠标单击复制粘贴标签中的内容

<span ref="spanContentOne" id="spanContentOne" style="font-size: 14px;">或许不是最亮眼,总比瞎买强一点</span><!--<input type="button" @click="copyClick('1')" value="复制" />-......

帝子兮
22分钟前
0
0
使用axel多线程疯狂下载

在Linux中比较常见见的下载工具是curl和wget,但是下载比较大的文件两者都不支持多线程, 断点续传的作用不见得能发挥到最大。今天介绍一个axel工具,开启多线程疯狂下载。 安装 Fedora/Cen...

linuxprobe16
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部