各位好!,我是狼王,一个爱打篮球的程序猿
它是策略模式的第七篇,这篇使我们来认识一下适配器模式
1、简述
适配器模式是一种结构性策略模式, 它能使插口兼容问题的目标可以互相配合。
2、可用情景
1)如果你期待应用某一类, 可是其插口与别的编码兼容问题时, 能够应用电源适配器类。
2)假如您必须应用那样一些类, 她们处在同一个承继管理体系, 而且她们又拥有附加的一些一同的方式 , 可是这种一同的方式 非是全部在这里一承继管理体系中的子类所具备的关联性。能够将这种方式 封裝在一个装饰器中。
3、案例
有下列情景:
方钉兼容圆洞的电源适配器,方钉想放进圆洞中,则圆洞的直徑相当于方钉的顶角长短。
界定方钉、圆洞
圆洞:
直徑
圆钉:
直徑
方钉:
周长
界定方钉:
public class SquareNails {
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public SquareNails(double width) {
this.width = width;
}
/**
* 周长
*/
private double width;
}
界定圆钉:
public class RoundNails {
/**
* 直徑
*/
private double diameter;
public double getDiameter() {
return diameter;
}
public void setDiameter(double diameter) {
this.diameter = diameter;
}
public RoundNails(double diameter) {
this.diameter = diameter;
}
}
界定圆洞:
public class RoundHold {
/**
* 直徑
*/
private double diameter;
public RoundHold(double diameter) {
this.diameter = diameter;
}
public double getDiameter() {
return diameter;
}
public void setDiameter(double diameter) {
this.diameter = diameter;
}
/**
* 校检是不是适合
* @param roundNails
* @return
*/
public boolean fits(RoundNails roundNails){
if (diameter >= roundNails.getDiameter()){
return true;
}else {
return false;
}
}
}
界定电源适配器:
public class SquareNailsRoundHoldAdapter {
public RoundNails getResult(SquareNails squareNails){
double width = squareNails.getWidth();
double diagonal = width * Math.sqrt(2);
RoundNails roundNails = new RoundNails(diagonal);
return roundNails;
}
}
检测类:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
public class TestDemo {
@Test
public void test() {
//界定个圆洞
RoundHold roundHold = new RoundHold(10);
//界定圆钉
RoundNails roundNails = new RoundNails(10);
//界定方钉,行高10
SquareNails squareNails10 = new SquareNails(10);
//界定方钉,行高6
SquareNails squareNails6 = new SquareNails(6);
//电源适配器
SquareNailsRoundHoldAdapter squareNailsRoundHoldAdapter = new SquareNailsRoundHoldAdapter();
RoundNails result10 = squareNailsRoundHoldAdapter.getResult(squareNails10);
RoundNails result6 = squareNailsRoundHoldAdapter.getResult(squareNails6);
//圆钉是不是适合
if (roundHold.fits(roundNails)) {
System.out.println("this round nails is fits");
} else {
System.out.println("this round nails is does not fits");
}
//10方钉是不是适合
if (roundHold.fits(result10)) {
System.out.println("squareNails10 is fits");
} else {
System.out.println("squareNails10 is does not fits");
}
//6方钉是不是适合
if (roundHold.fits(result6)) {
System.out.println("squareNails6 is fits");
} else {
System.out.println("squareNails6 is does not fits");
}
}
}
結果:
this round nails is fits
squareNails10 is does not fits
squareNails6 is fits
4、小结
优势:
1)单一标准:将编码或是数据交换的全过程从关键领域模型区别出去。
2)开闭原则:只需手机客户端编码根据手机客户端插口与电源适配器开展互动, 你也就能不在改动目前手机客户端编码的状况下到程序流程中加上新种类的电源适配器。
缺陷:
提升编码复杂性。应用时必须考虑到是不是在原作用上改动更为简易。