模拟美团外卖付款
分为微信,支付宝,银行卡等方式
美团外卖接口:
public interface Mtwm {
/**
* 支付方式
*/
public void payOnLine();
}
微信
public class WeChat implements Mtwm {
@Override
public void payOnLine() {
System.out.println("使用微信付款");
}
}
支付宝
public class AliPay implements Mtwm {
@Override
public void payOnLine() {
System.out.println("使用支付宝付款");
}
}
银行卡
public class BankCard implements Mtwm {
@Override
public void payOnLine() {
System.out.println("使用银行卡付款");
}
}
测试
@Test
public void test01(){
Mtwm mm = new AliPay();
if(mm instanceof AliPay){
mm.payOnLine();
}
if(mm instanceof WeChat){
mm.payOnLine();
}
if(mm instanceof BankCard){
mm.payOnLine();
}
}
问题:
如果以后付款方式多了,那就得不停地instanceof,解决--->引入反射
修改
@Test
public void test02() throws Exception {
String str = "com.yzc.reflects.reflect1.AliPay";
Class<?> aClass = Class.forName(str);
Object o = aClass.newInstance();
Method method = aClass.getMethod("payOnLine");
method.invoke(o);
}
再次修改的话,只需要修改str就行了,不用在重新增加代码,使其保持清爽
Java反射机制的定义
Java反射机制是在运行状态中,对任意一个类,都能够知道这个类的所有方法和属性;对于任意一个对象,都能调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制
Class类
获取字节码的方式
@Test
public void getClassMethod() throws Exception {
Class.forName("com.yzc.reflects.reflect1.AliPay");
}