适配器模式
系统依赖老的类来运行,但需要使用无法支持的新的功能,此时可以用适配器模式,在老的类中装入适配器,调用适配器来运行新的功能。类似于系统依赖一个读卡程序来加载磁盘数据,但是现在需要支持SD、TF卡读数,此时可以实现一个适配器,让原来的cardReader通过适配器调用TF和SD的reader来访问数据。
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| public interface Reader { public void read(); }
public class CardReader implements Reader { public void read(){} }
public interface ExtendReader { public void readTF(); public void readSD(); }
public class TFCardReader implements ExtendReader { public void readTF(){ } public void readSD(){} } public class SDCardReader implements ExtendReader { public void readTF(){} public void readSD(){ } }
public class CardReaderAdapter implements Reader { ExtendReader extendCardReader;
public CardReaderAdapter(String type){ switch (type){ case "sd": extendCardReader = new SDCardReader(); break; case "tf": extendCardReader = new TFCardReader(); break; default: throw new Exception("不支持的卡类型"); } }
public void read(String type){ switch (type){ case "sd": extendCardReader.readSD(); break; case "tf": extendCardReader.readTF(); break; default: throw new Exception("不支持的卡类型"); } } }
public class CardReader implements CardReader { CardReaderAdapter cardReaderAdapter;
public void read(String type){ switch (type){ case "sd": case "tf": cardReaderAdapter = new CardReaderAdapter(type); cardReaderAdapter.read(type); default: } } }
|