一,定义
为了在已有的功能上做拓展的方法
二,代码
- 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)行:默认没有实现的播放类型