码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-代理模式

时间:2015-04-01 11:18:40      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!