通过案例体会反射的好处

案例:美团外卖---》付款---》要么微信要么支付宝

复制代码
package com.liu.test01;

/**
 * @author : liu
 * 日期:08:54:25
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
//接口的指定方:买团外卖
public interface Mtwm {
    //在线支付功能:
    void payOnline();
}
复制代码
复制代码
package com.liu.test01;

/**
 * @author : liu
 * 日期:08:55:37
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class WeChat implements Mtwm{
    @Override
    public void payOnline() {
        //具体实现微信支付功能
        System.out.println("我已经点了外卖正在使用微信支付");
    }
}
复制代码
复制代码
package com.liu.test01;

/**
 * @author : liu
 * 日期:08:56:58
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class AliPay implements Mtwm{
    @Override
    public void payOnline() {
        //具体的支付宝支付
        System.out.println("我已经点了外卖我正在使用支付宝进行支付");
    }
}
复制代码
复制代码
package com.liu.test01;

/**
 * @author : liu
 * 日期:09:18:45
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class BackCard implements Mtwm{
    @Override
    public void payOnline() {
        //具体支付
        System.out.println("我已经点了外卖我正在使用银行卡进行支付");
    }
}
复制代码

测试类

复制代码
package com.liu.test01;

/**
 * @author : liu
 * 日期:08:57:52
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        //定义一个字符串用来模拟前台的支付方式:
        String str="招商银行";
        if ("微信".equals(str)){//str.equals()????是为了避免空指针异常
            //微信支付:
            //new WeChat().payOnline();
            pay(new WeChat());
        }
        if ("支付宝".equals(str)){
            //支付宝支付:
            //new AliPay().payOnline();
            pay(new AliPay());
        }
        if ("招商银行".equals(str)){
            //招商银行支付:
            pay(new BackCard());
        }
    }
//微信支付
public static void pay(WeChat wc){ wc.payOnline(); }
//支付宝支付
public static void pay(AliPay aliPay){ aliPay.payOnline(); }
//银行卡支付
public static void pay(BackCard bPay){ bPay.payOnline(); } }
复制代码

为了提高代码的扩展性---》面向对象特性:多态

复制代码
package com.liu.test01;

/**
 * @author : liu
 * 日期:08:57:52
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        //定义一个字符串用来模拟前台的支付方式:
        String str="招商银行";
        if ("微信".equals(str)){//str.equals()????是为了避免空指针异常
            pay(new WeChat());
        }
        if ("支付宝".equals(str)){
            pay(new AliPay());
        }
        if ("招商银行".equals(str)){
            pay(new BackCard());
        }
    }
    //方法的形参是接口,具体传出的事接口类的实现类的对象---》多态的一种形式
    public static void pay(Mtwm wc){
        wc.payOnline();
    }
}
复制代码

多态确实可以提高代码的扩展性,但是:扩展性没有达到最好。

怎么没有达到最好:上面的分支还是需要手动的删除或添加

利用反射石先生上述功能

复制代码
package com.liu.test01;

import java.lang.reflect.Method;

/**
 * @author : liu
 * 日期:10:34:35
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Demo {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) throws Exception {
        String str="com.liu.test01.AliPay";//字符串:实际上:是微信类的全限定路径
        //下面的代码就是利用反射
        Class aClass = Class.forName(str);
        Object o = aClass.newInstance();
        Method payOnline = aClass.getMethod("payOnline");
        payOnline.invoke(o);
    }
}
复制代码

 

解决办法:反射机制

 

posted @   爱的加勒比  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示