分享

invocation

 Bradypod 2013-11-12
package com.feng.design.invocation;

public interface PersonBean {

String getName();
String getGender();
String getInterests();
int getHotOrNotRating();
void setName(String name);
void setGender(String gender);
void setInterests(String interest);
void setHotOrNotRaion(int rating);
}


package com.feng.design.invocation;

public class PersonBeanImpl implements PersonBean {

String name;
String gender;
String interests;
int rating;
int ratingCount = 0;
public PersonBeanImpl(String name, String gender, int rating, int ratingCount) {
this.name = name;
this.gender = gender;
this.rating = rating;
this.ratingCount = ratingCount;
}
@Override
public String getName() {
return name;
}

@Override
public String getGender() {
return gender;
}

@Override
public String getInterests() {
return interests;
}

@Override
public int getHotOrNotRating() {
if(ratingCount == 0) return 0;
return rating/ratingCount;
}

@Override
public void setName(String name) {
this.name = name;
}

@Override
public void setGender(String gender) {
this.gender = gender;
}

@Override
public void setInterests(String interest) {
this.interests = interest;
}

@Override
public void setHotOrNotRaion(int rating) {
this.rating += rating;
ratingCount ++;
}

}


package com.feng.design.invocation;

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

public class Owner implements InvocationHandler {

PersonBean person;
public Owner(PersonBean person) {
this.person = person;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
try {
if(method.getName().startsWith("get")) {
return method.invoke(person, args);
}else if(method.getName().equals("setHotOrNotRaion")) {
throw new IllegalAccessException("don't access");
}else if(method.getName().startsWith("set")) {
return method.invoke(person, args);
}
}catch(Exception e) {
e.printStackTrace();
}
return null;
}

}


package com.feng.design.invocation;

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

public class Noner implements InvocationHandler {

PersonBean person;
public Noner(PersonBean person) {
this.person = person;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
try {
if(method.getName().startsWith("get")) {
return method.invoke(person, args);
}else if(method.getName().equals("setHotOrNotRaion")) {
return method.invoke(person, args);
}else if(method.getName().startsWith("set")) {
throw new IllegalAccessException("don't access");
}
}catch(Exception e) {
e.printStackTrace();
}
return null;
}

}


package com.feng.design.invocation;

import java.lang.reflect.Proxy;

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
PersonBean person = new PersonBeanImpl("james", "basketball", 12, 2);
PersonBean owner = getOwnerProxy(person);
System.out.println(owner.getName());
owner.setName("wade");
System.out.println(owner.getName());
owner.setHotOrNotRaion(4);
System.out.println("-------------------------------------");
PersonBean noner = getNoneProxy(person);
System.out.println(noner.getHotOrNotRating());
noner.setHotOrNotRaion(4);
System.out.println(noner.getHotOrNotRating());
System.out.println(noner.getName());
noner.setName("bosh");
System.out.println(noner.getName());
}
public static PersonBean getOwnerProxy(PersonBean person) {
return (PersonBean) Proxy.newProxyInstance(person.getClass().getClassLoader(), person.getClass().getInterfaces(), new Owner(person));
}
public static PersonBean getNoneProxy(PersonBean person) {
return (PersonBean) Proxy.newProxyInstance(person.getClass().getClassLoader(), person.getClass().getInterfaces(), new Noner(person));
}

}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多