适配器模式

本文详细介绍了适配器模式的概念及其实现方式,包括对象适配器和类适配器的区别,并通过一个220V转12V的电源适配器示例,展示了如何在实际编程中应用这一模式。

涉及的知识:

1.对象适配器模式:通过对被适配的对象进行组合(可以对多个类进行适配,缺点,如果适配的类比较多,则会造成结构不清晰)

2.类适配器模式:通过继承被适配的类来实现(只能针对某一个类进行适配)

3.涉及原则:1.使用对象组合,面向接口和抽象编程。 2.开-闭原则

4.缺省的适配器模式(Default Adapter):缺省的适配器模式为一个接口提供缺省的实现,子类可以从这个缺省的实现类进行扩展,而不必而原有的接口进行扩展。相信大家在学习Swing时“AWT中事件的处理”有所接触。他的好处在于客户端不需要去实现与他无关的方法,只做他最关心的事。

这种模式的核心归结如下:当你想实现一个接口但又不想实现所有接口方法,只想去实现一部分方法时,就用中默认的适配器模式,他的方法是在接口和具体实现类中添加一个抽象类,而用抽象类去空实现目标接口的所有方法。而具体的实现类只需要覆盖其需要完成的方法即可。(依赖倒置的中间件)


实现思想

1.现又一个专门输出220v,12v的类(只有相近的人,才可能发生转换,不可能电能够转换成砖头,所以,一般他们都会继承自一个专门的抽象父类),其又专门的实现接口,专门的父类

  2.出现新的需求需要将220v的电源转换成12的电源,这是需要新建一个adaper类,实现12v 的接口,组合被适配的类(220v)。

3.通过新建的adapter类的构造方法,将220v对象传入,在12v接口实现类中完成适配

demo: 220v 转换成12v

1.被适配接口  Ipower220

public interface Ipower220 {

public void output220();

}

2.适配接口  Ipower12

public interface Ipower12 {

public void output12();

}

3.基类,适配和被适配对象之间,往往都有共同的基类,即有共性,砖头是无法变成馒头的

public class abstractBase {

private float power;

private int unit;

public float getPower() {

return power;

}

public void setPower(float power) {

this.power = power;

}

public int getUnit() {

return unit;

}

public void setUnit(int unit) {

this.unit = unit;

}

}

4.被适配实现类

public class power220 extends abstractBase implements Ipower220 {

public power220() {

this.setPower(220);

// TODO Auto-generated constructor stub

}


@Override

public void output220() {

// TODO Auto-generated method stub

System.out.println("220伏电压");

}

}

5.适配的实现类

public class power12 extends abstractBase implements Ipower12 {

public power12() {

this.setPower(12);

}


@Override

public void output12() {

System.out.println("12伏电压");

// TODO Auto-generated method stub


}


}


6.适配转换类

public class power220to12Adapter implements Ipower12 {


power220 mypower220;//适配对象中,包含被适配的引用,在构造函数中传入

float power;


public power220to12Adapter(power220 mypower220) {

// TODO Auto-generated constructor stub

this.mypower220 = mypower220;

}


@Override

public void output12() {

// TODO Auto-generated method stub

if (this.mypower220.getPower() == 220) {

this.power=this.mypower220.getPower()/18.33f;


}

System.out.println("将"+this.mypower220.getPower()+"转换为"+(int)power);

}


}

7.测试

power220 p220=new power220();

p220.output220();

power12 p12=new power12();

p12.output12();

power220to12Adapter adapter=new power220to12Adapter(p220);

adapter.output12();





评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值