一、java反射
可以动态的获取类中的任何方法,属性
public static void testReflex() throws ClassNotFoundException {
String name = "GaoWenZhong";
// 1、对象.getClass()获取类
Class<? extends String> nameClass = name.getClass();
// 2、 Class.forName获取类
String str = "java.lang.String";
Class<?> aClass = Class.forName(str);
System.out.printf(nameClass.getName());
AttendanceRecord attendanceRecord = new AttendanceRecord();
Class<AttendanceRecord> clazz = AttendanceRecord.class;
Field createTime = null;
try {
createTime = clazz.getDeclaredField("createTime");
Method getAttendanceId = clazz.getDeclaredMethod("getAttendanceId");
System.out.println(getAttendanceId);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
System.out.println(createTime);
}
二、设计模式——代理
1、新增接口
interface ClothFactory{
void produceCloth();
}
2、动态代理对象
//被代理类
class TrueClothFactory implements ClothFactory{
@Override
public void produceCloth() {
System.out.println("被代理对象,真正逻辑处理");
}
}
3、代理类
// 代理类
class ProxyFactory implements ClothFactory{
private ClothFactory factory;
public ProxyFactory(ClothFactory factory){
this.factory = factory;
}
@Override
public void produceCloth() {
System.out.println("代理前的准备!");
factory.produceCloth();
System.out.println("代理后的处理!");
}
}
4、具体使用
public class StaticProxyTest {
public static void main(String[] args) {
// 被代理对象
TrueClothFactory factory = new TrueClothFactory();
//代理对象
ProxyFactory proxyFactory = new ProxyFactory(factory);
proxyFactory.produceCloth();
}
}
三、代理扩展——动态代理(反射知识)
1、接口
interface DynamicProxy{
void testProxy();
}
2、代理类
class DynamicProxyImpl implements DynamicProxy{
@Override
public void testProxy() {
System.out.println("被代理对象真正操作的逻辑!");
}
}
3、获取动态代理目标
class DynamicProxyTarget {
private Object obj;
/**
* 通过构造方法给目标对象赋值
* @param target
*/
public DynamicProxyTarget(Object target){
this.obj = target;
}
public Object getProxy(){
Object proxy = null;
// 基于jdk Proxy类中的newProxyInstance方法来创建代理对象
proxy = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return null;
}
});
return proxy;
}
}
4、具体使用
public class DynamicProxyTest {
public static void main(String[] args) {
DynamicProxy dynamicProxy = new DynamicProxyImpl();
DynamicProxyTarget target = new DynamicProxyTarget(dynamicProxy);
Object proxy = target.getProxy();
DynamicProxy dynamicProxy1 = (DynamicProxy) proxy;
System.out.println("代理对象:" + dynamicProxy1.getClass().getName());
}
}
四、策略设计模式
1、策略实际模式参考