反射+代理+框架=我的迷你型框架

     这是我在看张孝祥老师的java教程视频之后写的代码

【1.制定一个借口Advice.java】

接口描述:此接口用于实现计算调用类代理方法所用的时间

package cn.itcast.wg.proxy.aop.framework;

import java.lang.reflect.Method;

public interface Advice {
 void beforeMethod(Method method);
 void afterMethod(Method method);
}

 

【2.写一个类AdviceTest.java实现Advice.java】

类描述用于实现Advice接口

package cn.itcast.wg.proxy.aop.framework;

import java.lang.reflect.Method;

public class AdviceTest implements Advice {

 private long beginTime;
 private long endTime;
 public void afterMethod(Method method) {
  endTime = System.currentTimeMillis();
  
  System.out.println("执行" + method.getName() + "方法用了" + (endTime - beginTime) + "毫秒" );

 }

 public void beforeMethod(Method method) {
  beginTime = System.currentTimeMillis();

 }

}
   

【3.写代理生产工厂ProxyBeanFactory.java】

 

类描述生产代理类

package cn.itcast.wg.proxy.aop.framework;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyBeanFactory {
 private Advice advice;
 private Object target;
 public ProxyBeanFactory() {
  
 }
 public ProxyBeanFactory(Advice advice, Object target) {
  super();
  this.advice = advice;
  this.target = target;
 }
 public Object getProxy() {
  return Proxy.newProxyInstance(
    target.getClass().getClassLoader(),
    target.getClass().getInterfaces(),
    new InvocationHandler() {

     public Object invoke(Object proxy, Method method, Object[] args)
       throws Throwable {
      // TODO Auto-generated method stub
      advice.beforeMethod(method);
      Object objVar = method.invoke(target, args);
      advice.afterMethod(method);
      return objVar;
     }
    });
 }
}

【4.写返回代理的实现BeanFactory.java】

根据配置文件的信息返回代理,还是这个接口的实现类

package cn.itcast.wg.proxy.aop.framework;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class BeanFactory {
 Properties properties = new Properties();
 public BeanFactory(InputStream iso) {
  try {
   properties.load(iso);
   iso.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public Object getBean(String name) {
  Object obj = null;
  
  try {
   obj = Class.forName(properties.getProperty(name)).newInstance();
   if(obj instanceof ProxyBeanFactory ) {
    Advice advice = (Advice) Class.forName(properties.getProperty(name + ".advice")).newInstance();
    Object target = Class.forName(properties.getProperty(name + ".target")).newInstance();
    ProxyBeanFactory pFactory = new ProxyBeanFactory(advice,target);
    return pFactory.getProxy();
   }
   
  } catch (Exception e) {
   e.printStackTrace();
  }
  
  return obj;
 }
}

 

【5.写自己的config.properties配置文件】

#xxx=java.util.ArrayList
xxx=cn.itcast.wg.proxy.aop.framework.ProxyBeanFactory
xxx.advice=cn.itcast.wg.proxy.aop.framework.AdviceTest
xxx.target=java.util.HashSet

 

【6.实验自己所写的框架BeanTest.java】

package cn.itcast.wg.proxy.aop.framework;

import java.io.InputStream;
import java.util.Collection;

public class BeanTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  InputStream iso = BeanTest.class.getResourceAsStream("config.properties");
  BeanFactory beanFactory = new BeanFactory(iso);
  Collection c = (Collection) beanFactory.getBean("xxx");
  c.add(1);
 }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是用来实现迷宫游戏中视野范围内迷宫、游戏者和迷你地图的绘制。 1. `int x1, y1;` 定义了两个整变量,用于存储单元格的左上角在视野中的坐标。 2. `SetWorkingImage(&g_imgSight);` 将绘图设备设置为 g_imgSight。 3. `for (int x = g_rtSight.left; x <= g_rtSight.right; x++)` 嵌套循环,遍历视野范围内的所有单元格的 x 坐标。 4. `for (int y = g_rtSight.top; y <= g_rtSight.bottom; y++)` 嵌套循环,遍历视野范围内的所有单元格的 y 坐标。 5. `x1 = (x - g_rtSight.left) * 20;` 计算单元格的左上角在视野中的 x 坐标。 6. `y1 = (y - g_rtSight.top) * 20;` 计算单元格的左上角在视野中的 y 坐标。 7. `putimage(x1, y1, 20, 20, &g_imgItem, GetMazeItem(x, y), 0);` 在视野中的指定位置绘制单元格。 8. `x1 = (g_ptPlayer.x - g_rtSight.left) * 20;` 计算游戏者在视野中的 x 坐标。 9. `y1 = (g_ptPlayer.y - g_rtSight.top) * 20;` 计算游戏者在视野中的 y 坐标。 10. `putimage(x1, y1, 20, 20, &g_imgItem, MAP_PLAYER, 0);` 在视野中的指定位置绘制游戏者。 11. `SetWorkingImage(&g_imgGPS);` 将绘图设备设置为 g_imgGPS。 12. `cleardevice();` 清空绘图设备。 13. `int tx = (int)((g_ptPlayer.x - 1) * g_szGPS.cx / (double)(g_szMap.cx - 1) + 0.5);` 计算迷你地图上游戏者的 x 坐标。 14. `int ty = (int)((g_ptPlayer.y - 1) * g_szGPS.cy / (double)(g_szMap.cy - 1) + 0.5);` 计算迷你地图上游戏者的 y 坐标。 15. `setlinecolor(YELLOW);` 设置绘制颜色为黄色。 16. `circle(tx, ty, 1);` 在迷你地图上绘制游戏者的位置。 17. `SetWorkingImage();` 将绘图设备还原为默认值。 18. `putimage(150, 110, 340, 260, &g_imgSight, 10, 10);` 在绘图窗口的指定位置绘制视野范围内的迷宫。 19. `putimage(g_ptGPS.x, g_ptGPS.y, &g_imgGPS);` 在绘图窗口的指定位置绘制迷你地图。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值