文档章节

设计模式-适配器模式

月夜筱风
 月夜筱风
发布于 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
闵行
程序员

暂无文章

Minifilter的动态安装、加载及卸载

MINIFILTER框架的文件系统过滤驱动,无法使用的CreateService和OpenService进行动态加载。 看了一下,使用Inf文件安装Minifilter驱动的方式是在注册表驱动服务项下比传统驱动多创建了Instanc...

simpower
19分钟前
0
0
idea新建springCloud项目(6)- Config Server使用

1.在IDEA新建springCloud项目-Config Server 修改版本,和之前建的eureka项目版本一致,修改完记得刷新: 删除掉不需要的文件: 2.把Config S 服务注册到eureka上去,配置git地址,启动项目 ...

monroeCode
25分钟前
3
0
大数据可视化项目开发总纲

第1章 开发文档总纲 1.1 开发工具清单 名称 版本 备注 Pentaho-bi server pentaho-server-ce-7.1 Pentaho Cde为其内置工具 Pentaho-prd pentaho-prd-ce-7.1 Pentaho Report Designer报表工具...

ZhangLG
25分钟前
2
0
pip安装超时问题

pip3 install --default-timeout=100 tensorflow 设置为100秒 参考: User Guide How to solve ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443) with pip?......

亚林瓜子
27分钟前
0
0
fragment 旋转时保持当前实例

设备旋转时保存Fragment的交互状态: setRetainInstance(true);

zdglf
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部