恋爱过程中的设计模式之代理模式(动态代理模式)

代理模式分为静态代理和动态代理
下面我分别举例静态代理和动态代理的实例以及如何使用代理模式实现AOP的功能

动态代理模式

package com.fruitking.designparten.proxy.dproxy;

public interface Idea {

/**
* 表白
* @param condition
* @return
*/
public String tell(String condition);

/**
* 寄送礼品
* @param gift
* @return
*/
public String delivery(String gift);

}


package com.fruitking.designparten.proxy.dproxy;


public class HeroImpl implements Idea {

public String tell(String condition) {
System.out.println("××,我喜欢你,做我女朋友吧!");
String returnOfGirl = "";
if("有房".equals(condition)){
returnOfGirl = "可以";
}else if("月薪1万以上".equals(condition)){
returnOfGirl = "可以";
}else if("长得帅".equals(condition)){
returnOfGirl = "可以";
}else{
returnOfGirl = "去死吧,我怎么可能喜欢你呢,下辈子吧";
}
return returnOfGirl;
}

public String delivery(String gift){
System.out.println("××,送给你的情人节礼物!");
String returnOfGirl = "";
if("奔驰轿车".equals(gift)){
returnOfGirl = "亲爱的,我非常爱你";
}else if("大钻戒".equals(gift)){
returnOfGirl = "亲爱的,我很爱你";
}else if("铂金项链".equals(gift)){
returnOfGirl = "亲爱的,我爱你";
}else if("毛绒娃娃".equals(gift)){
returnOfGirl = "亲爱的,谢谢啦";
}else{
returnOfGirl = "谢谢啦,我要回家了,再见";
}
return returnOfGirl;
}
}


package com.fruitking.designparten.proxy.dproxy;

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


public class HeroProxy implements InvocationHandler {

private Idea hero;

public HeroProxy(){
}

public Idea bind(Idea obj){
this.hero = obj;
return (Idea)Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);
}

public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("代理人(女孩室友)去帮男主角转达/递送");
Object obj =method.invoke(this.hero, args);
System.out.println("代理人(女孩室友)已经帮男主角转达/递送");
return (String)obj;
}
}


package com.fruitking.designparten.proxy.dproxy;


public class Test {

public static void main(String[] args) {
Idea heroImpl = new HeroImpl();
HeroProxy heroProxy = new HeroProxy();
Idea idea = (Idea)heroProxy.bind(heroImpl);
String result = idea.tell("没有房子,月薪没有一万,长得不帅");
System.out.println(result);
System.out.println("-------------------------");
result = idea.tell("有房");
System.out.println(result);
System.out.println("-------------------------");
result = idea.delivery("大钻戒");
System.out.println(result);
System.out.println("-------------------------");
result = idea.delivery("爆米花");
System.out.println(result);
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值