博客 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)。
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 即可。