适配器模式:
适配器就相当于我们的转接头,比如手机充电器插头(小米和华为的手机充电器不能共用,这时候就可以给华为的充电器按一个转接头,就可以给小米手机充电)。
同理,当一个类(充电器 HuaweiCharger)实现了某一个接口(华为 HuaweiPhone),但有时我们又需要去实现另一个接口(小米 XiaomiPhone),如果直接让充电器去实现小米接口,就需要实现小米接口中的方法,如果充电器类已经被打到一个包中,这时候修改就比较困难,也违反开闭原则(扩展开,修改闭)。因此我们就需要建立一个适配器类(HTXAdapter Huawei Transform Xiaomi Adapter)去实现小米接口,同时又继承自充电器类。
1 /** 2 * 华为手机接口 3 * 4 * @author DennyZhao 5 * @date 2017年6月20日 6 * @version 1.0 7 */ 8 public interface HuaweiPhone { 9 10 public int getSquarePlug(); 11 12 public int getSquareInterface(); 13 14 public void getAndroidSys(); 15 16 public void getHuaweiInput(); 17 18 public void getInterCpu(); 19 20 public void getInterBoard(); 21 22 }
1 /** 2 * 小米手机 3 * 4 * @author DennyZhao 5 * @date 2017年6月20日 6 * @version 1.0 7 */ 8 public interface XiaomiPhone { 9 10 public int getCirclePlug(); 11 12 public int getCircleInterface(); 13 14 public void getAndroidPlusSys(); 15 16 public void getXiaomiInput(); 17 18 public void getAMDCpu(); 19 20 public void getAMDBoard(); 21 }
1 /** 2 * 华为充电器 3 * 4 * @author DennyZhao 5 * @date 2017年6月20日 6 * @version 1.0 7 */ 8 public class HuaweiCharger extends HuaweiPhoneImpl implements HuaweiPhone{ 9 10 @Override 11 public int getSquarePlug() { 12 System.out.println("squarePlug----------"); 13 return 0; 14 } 15 16 @Override 17 public int getSquareInterface() { 18 System.out.println("squareInterface----------"); 19 return 0; 20 } 21 22 23 }
1 /** 2 * description:设计原则讲究扩展开,修改闭。因此当我们需要将一个类去实现另一个接口时,可以通过创建子类去实现这个接口。 3 * 4 * @author DennyZhao 5 * @date 2017年6月12日 6 * @version 1.0 7 */ 8 public class HTXAdapter extends HuaweiCharger implements XiaomiPhone{ 9 10 /** 11 * 小米适配 12 */ 13 @Override 14 public int getCirclePlug() { 15 int a = super.getSquarePlug(); 16 return a+ 5; 17 } 18 19 /** 20 * 小米适配 21 */ 22 @Override 23 public int getCircleInterface() { 24 int b = super.getSquareInterface(); 25 return b + 4; 26 } 27 @Override 28 public void getAndroidPlusSys() { 29 // TODO Auto-generated method stub 30 31 } 32 33 @Override 34 public void getXiaomiInput() { 35 // TODO Auto-generated method stub 36 37 } 38 39 @Override 40 public void getAMDCpu() { 41 // TODO Auto-generated method stub 42 43 } 44 45 @Override 46 public void getAMDBoard() { 47 // TODO Auto-generated method stub 48 49 } 50 51 }
通过上面的代码就可以知道,HTXAdaper实现了Xiaomi接口的所有方法,这样就不会污染HuaweiCharger了。随时不用可以去掉。插拔式结构。