设计模式-适配器模式

一,定义

输入图片说明

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

二,代码

  • 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)行:默认没有实现的播放类型

转载于:https://my.oschina.net/lijunhao2016/blog/1528664

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值