标签:
1.基础代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问。
类图示例:
?
ProxyComputer和RealComputer都实现Computer接口,RealComputer是真正实现电脑功能的类,ProxyComputer作为RealComputer的代理,和RealComputer拥有一样的接口,并且负责RealComputer对象的创建和销毁。
?
2.动态代理模式
JAVA 在java.lang.reflect类库提供对动态模式的支持。
类图示例:
代码示例:
public interface PersonBean {
????
????String getName();
????String getGender();
????String getInterests();
????int getHotOrRating();
????
????void setName(String name);
????void setGender(String gender);
????void setInterests(String interest);
????void setHotOrNotRating(int rating);
}
?
public class PersonBeanImpl implements PersonBean{
?
????private String mName;
????private String mGender;
????private String mInterests;
????private int mRating = 0;
????int mRatingCount = 0;
????@Override
????public String getName() {
????????// TODO Auto-generated method stub
????????return mName;
????}
?
????@Override
????public String getGender() {
????????// TODO Auto-generated method stub
????????return mGender;
????}
?
????@Override
????public String getInterests() {
????????// TODO Auto-generated method stub
????????return mInterests;
????}
????
????@Override
????public int getHotOrRating() {
????????// TODO Auto-generated method stub
????????return mRatingCount == 0 ? 0 : (mRating / mRatingCount);
????}
?
????@Override
????public void setName(String name) {
????????// TODO Auto-generated method stub
????????mName = name;
????}
?
????@Override
????public void setGender(String gender) {
????????// TODO Auto-generated method stub
????????mGender = gender;
????}
?
????@Override
????public void setInterests(String interest) {
????????// TODO Auto-generated method stub
????????mInterests = interest;
????}
?
????@Override
????public void setHotOrNotRating(int rating) {
????????// TODO Auto-generated method stub
????????mRating = rating;
????????mRatingCount++;
????}
?
}
?
public class OwnerInvocationHandler implements InvocationHandler {
?
????PersonBean mBean;
?
????public OwnerInvocationHandler(PersonBean bean) {
????????mBean = bean;
????}
?
????@Override
????public Object invoke(Object proxy, Method method, Object[] args)
????????????throws IllegalAccessException {
????????// TODO Auto-generated method stub
????????try {
????????????if (method.getName().startsWith("get")) {
????????????????return method.invoke(mBean, args);
????????????} else if (method.getName().equals("setHotOrNotRating")) {
????????????????throw new IllegalAccessException();
????????????} else if (method.getName().startsWith("set")) {
????????????????return method.invoke(mBean, args);
????????????}
????????} catch (InvocationTargetException e) {
????????????// TODO Auto-generated catch block
????????????e.printStackTrace();
????????}
????????return null;
????}
?
}
?
public class PersonClient {
?
????public static void main(String[] args) {
?
????????PersonBean bean = new PersonBeanImpl();
?
????????PersonBean owen = getOwenPerson(bean);
?
????????PersonBean noOwer = getNoOwenPerson(bean);
?
????????owen.setGender("女");
????????owen.setName("王二");
????????owen.setInterests("打篮球");
????????//owen.setHotOrNotRating(9);
?
????????noOwer.setGender("女");
????????noOwer.setName("王二");
????????noOwer.setInterests("打篮球");
????????noOwer.setHotOrNotRating(9);
?
????????System.out.println("owen : " + owen.getName() + "/" + owen.getGender()
????????????????+ "/" + owen.getInterests() + "/" + owen.getHotOrRating());
????????
????????System.out.println("noOwer : " + noOwer.getName() + "/" + noOwer.getGender()
????????????????+ "/" + noOwer.getInterests() + "/" + noOwer.getHotOrRating());
????}
?
????public static PersonBean getOwenPerson(PersonBean bean) {
????????return (PersonBean) Proxy.newProxyInstance(bean.getClass()
????????????????.getClassLoader(), bean.getClass().getInterfaces(),
????????????????new OwnerInvocationHandler(bean));
????}
?
????public static PersonBean getNoOwenPerson(PersonBean bean) {
????????return (PersonBean) Proxy.newProxyInstance(bean.getClass()
????????????????.getClassLoader(), bean.getClass().getInterfaces(),
????????????????new NoOwerInvocationHandler(bean));
????}
}
?
标签:
原文地址:http://www.cnblogs.com/jaden/p/4383142.html