设计模式-适配器模式
设计模式-适配器模式
月夜筱风 发表于3个月前
设计模式-适配器模式
  • 发表于 3个月前
  • 阅读 5
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

一,定义

输入图片说明

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

二,代码

  • 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
博文 53
码字总数 19574
×
月夜筱风
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: