【类反射】类反射的一个引例(USB)

根据类反射原理演示USB

接口简单原理:

(1)平常如果想要使用USB接口,可以在此USB上插入键盘、鼠标就可以直接使用了。但是想要了解它真正的工作原理是什么样的呢?

(2)我们知道,对于接口:它是对外提供一种可以直接使用的方式,而将具体的工作过程封装了起来。

(3)类似的,①我们可以造一个接口,②通过工厂方法去调用接口,③在工厂方法中通过配置文件使用具体的实现类。

(4)此时,可以得到如图框架,在具体使用的时候可以直接用UsbClient类进行调用。

这里写图片描述

USB接口类:

package cn.hncu.reflect.test.usb;

/**
 * 写一个USB接口,用于工作work:可以让鼠标mouse键盘key进行工作work
 * 
 *@author <a"283505495@qq.com">lxd</a>
 *@version 1.0 2017-4-15 下午1:02:46
 *@fileName USB.java
 */
public interface USB {
    public abstract void work();
}

UsbKeyBoard实现类:

package cn.hncu.reflect.test.usb.impl;

import cn.hncu.reflect.test.usb.USB;

public class UsbKeyBoard implements USB{

    @Override
    public void work() {
        System.out.println("keyboard is work....");
    }

}

UsbMouse实现类:

package cn.hncu.reflect.test.usb.impl;

import cn.hncu.reflect.test.usb.USB;
public class UsbMouse implements USB{
    @Override
    public void work() {
        System.out.println("mouse is working....");
    }
}

UsbFactory工厂类:

package cn.hncu.reflect.test.usb.factory;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Properties;

import cn.hncu.reflect.test.usb.USB;

/**
 * 1、可以通过工厂方法封装来使用接口

 *@author <a"283505495@qq.com">lxd</a>
 *@version 1.0 2017-4-15 下午1:06:28
 *@fileName USBFactory.java
 */
public class USBFactory {
    private USBFactory(){
    }

    public static USB getUSB(){
        USB usb=null;
        try {
            Properties p=new Properties();
            FileInputStream fin= new FileInputStream("./bin/cn/hncu/reflect/test/usb/factory/usb.config");
            /*
             * 从输入流中读取属性列表(键和元素对)。
             */
            p.load(fin);
            String name=p.getProperty("name");
            Class c=Class.forName(name);
            usb=(USB) c.newInstance();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return usb;
    }
}

工厂中的配置文件Usb.config:

#name=cn.hncu.reflect.test.usb.impl.UsbKeyBoard
name=cn.hncu.reflect.test.usb.impl.UsbMouse

客户的测试类UsbClient:

package cn.hncu.reflect.test;

import cn.hncu.reflect.test.usb.USB;
import cn.hncu.reflect.test.usb.factory.USBFactory;

public class UsbClient {
    public static void main(String[] args) {
        USB usb=USBFactory.getUSB();
        usb.work();
    }
}

运行结果:

当在配置文件中选择UsbMouse运行结果输出为:

这里写图片描述

当在配置文件选择UsbKeyBoard运行结果输出为:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值