文档章节

设计模式-适配器模式

月夜筱风
 月夜筱风
发布于 2017/09/04 15:38
字数 476
阅读 10
收藏 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
闵行
程序员
私信 提问

暂无文章

GO redis 相关操作

在gopath 目录下安装 go get github.com/garyburd/redigo/redis package mainimport ("fmt""github.com/garyburd/redigo/redis")//定义一个全局链接池变量var pool *redis.Pool//......

汤汤圆圆
30分钟前
6
0
java8性特性,常用的lambda表达式

1、抽取多个对象中的某个属性,用数组接收 List<Student> students = new ArrayList<>(); List<String> names =students.stream().map(Student::getName).collect(Collectors.toList()); 2、......

Boss-x
31分钟前
7
0
flutter 子组件与父组件

无论是子组件还是父组件,任何时候initState()只执行一次,如果需要判断 就在build里面进行,不然无效的。

大灰狼wow
33分钟前
4
0
Rancher Labs引入全球首个多集群、多租户的Prometheus支持!

近日,Rancher Labs宣布加强对Prometheus的支持,提高Kubernetes集群的可见度。Rancher也因此成为唯一一个在多集群、多租户环境中支持Prometheus的解决方案。 Prometheus正迅速成为监控云原生...

RancherLabs
35分钟前
3
0
vue项目中api接口管理总结

默认vue项目中已经使用vue-cli生成,安装axios,基于element-ui开发,axiosconfig目录和api目录是同级,主要记录配置的相关。 1. 在axiosconfig目录下的axiosConfig.js import Vue from 'vue...

peakedness丶
38分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部