博客Pattern: Adapter 简单实现大致说了说 Adapter Pattern 是怎么回事。
针对Adapter Pattern,进一步的实现。
代码工程结构
这次实现与上次不同的地方很多,主要的不同在于将类抽象化。
Adapter 一个接口,抽象类 PowerAdapter 实现了该接口。
IntelPCPowerAdapter 是 PowerAdapter 的实现类。
PC 抽象类,IntelPC 是其具体实现类。
具体设计代码如下
Adapter.java
package mark.zhang;
public interface Adapter {
public abstract int convert();
}
只提供 covnvert 方法,让子类自己实现。
PowerAdapter.java
package mark.zhang;
public abstract class PowerAdapter implements Adapter {
private Power power;
public PowerAdapter(Power p) {
power = p;
}
public Power getPower() {
return power;
}
}
委派给 Power
IntelPCPowerAdapter.java
package mark.zhang;
public class IntelPCPowerAdapter extends PowerAdapter {
public IntelPCPowerAdapter(Power p) {
super(p);
p.setVltage(25);
}
@Override
public int convert() {
return getPower().getVoltage();
}
}
实现具体的接口方法,调用 Power 的方法(转换具体的电压值给 IntelPC)。
Power.java
package mark.zhang;
public class Power {
private int out_voltage;
public int getVoltage() {
return out_voltage;
}
public void setVltage(int out_voltage) {
this.out_voltage = out_voltage;
}
}
package mark.zhang;
public abstract class PC<T extends Adapter> {
public abstract void setAdapter(T adapter);
public abstract T getAdapter();
}
IntelPC.java
package mark.zhang;
public class IntelPC extends PC<PowerAdapter> {
private PowerAdapter mAdapter;
private void charge(int curVoltage) {
if (curVoltage == 25) {
System.out.println("the IntelPC is charging.....");
System.out.println("you can open it and working.....");
} else {
System.out.println("Alert! The IntelPC can't be charged!");
}
}
@Override
public void setAdapter(PowerAdapter adapter) {
mAdapter = adapter;
charge(mAdapter.convert());
}
@Override
public PowerAdapter getAdapter() {
return mAdapter;
}
}
客户端调用 Client.java
package mark.zhang;
public class Client {
public static void main(String[] args) {
Power power = new Power();
PC<PowerAdapter> pc = new IntelPC();
PowerAdapter pAdapter = new IntelPCPowerAdapter(power);
pc.setAdapter(pAdapter);
}
}
如果你现在还有 AMDPC,自己可以实现一个 AMDPCPowerAdapter 即可。