代理模式分为静态代理和动态代理
下面我分别举例静态代理和动态代理的实例以及如何使用代理模式实现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);
}
}
分享到:
相关推荐
“革命加恋爱”模式中的恋爱,已然从个人情感的抒发转变为表达时代理想和革命信念的修辞手法,这恰恰说明了在那个特殊时期,人们对于爱情和革命的双重追求。 “革命加恋爱”模式的兴起,与当时中国社会的发展...
设计模式作为软件工程领域的重要组成部分,旨在解决软件开发过程中遇到的常见问题。C++作为一种广泛应用的面向对象编程语言,掌握其设计模式对于提高编程效率、增强软件可维护性和扩展性具有重要意义。接下来,我们...
在IT领域,特别是软件开发行业中,设计模式是程序员必须掌握的核心知识之一。设计模式是一种在特定情境下解决常见问题的可重用解决方案,它能够帮助开发者编写出更灵活、更可维护的代码。《Java23种设计模式与追MM》...
恋爱话术小程序的设计 土味情话小程序的设计 恋爱导师小程序的设计 小程序开发工具推荐 小程序开发教程 小程序流量主盈利模式 小程序多种流量主模式的实现 小程序广告投放策略 小程序用户获取方法
恋爱话术小程序源码是一款专为用户提供恋爱技巧和交流策略的应用程序源代码,它结合了“土味情话”和“恋爱导师”的概念,旨在帮助用户在情感交往中找到合适的话语和方法。这款源码的独特之处在于其支持多种流量主...
10. **教学模式**:通过教程、指南或者游戏化学习,使用户在轻松愉快的氛围中掌握恋爱技巧。 在【mengwei_speechcraft_sd】这个压缩包中,可能包含了应用程序的资源文件、数据库、图片、音频和代码文件等,用于构建...
博弈论中的关键概念,如纳什均衡、囚徒困境等,都可以被巧妙地应用于解释恋爱中的决策过程。 项目中的核心文件包括: 1. **App.config**:这是.NET应用程序的配置文件,用于存储应用程序运行时的配置信息,例如...
大家好今天给大家带来一款微信版本的恋爱小助手小程序源码 该源码由多种功能组合而成 目前已拥有的功能为 恋爱信封表白制作生成(内涵N种文案) 头像转漫画制作 土味情话 舔狗语录 渣女语录 暖男情话 等等...
通过这些产生式,恋爱产生式系统可以学习和模仿人类在恋爱中的行为,为虚拟环境或机器人提供更人性化、情感化的互动体验。尽管目前的技术仍处在初级阶段,但随着人工智能的发展,恋爱产生式系统有可能在未来帮助我们...
在“谈恋爱模型_增强学习_数学建模_”这个主题中,我们主要探讨的是如何运用数学建模的方法来模拟人类的恋爱过程,并结合增强学习的理论来加深对这一复杂社交现象的理解,以此激发学生对数学的兴趣。下面我们将详细...
1. **工作与生活平衡**:程序员的工作时间常常不规律,加班是常态,这可能导致他们在恋爱中难以找到合适的时间陪伴另一半,如何平衡工作与生活,是他们面临的一大挑战。 2. **沟通方式**:程序员通常善于逻辑分析,...
这个压缩包包含了一套完整的前端和后端源代码,以及10万条预设的恋爱对话数据,旨在帮助用户提高在恋爱关系中的沟通能力,解决情感交流中的困扰。以下是关于这个项目的一些关键知识点: 1. **前后端分离**:这是一...
恋爱话术小程序源码-土味情话,恋爱导师支持多种流量主模式.txt
然而,通过成本收益分析,我们可以帮助大学生们更加理性地认识恋爱,引导他们正确对待恋爱中的付出与回报,从而在感情投入和学业、生活之间找到平衡点。这不仅有助于避免恋爱过程中可能出现的不必要的挫折与打击,...
恋爱风暴+恋爱天空.tar
你猜的不错,这就是一款恋爱话术小程序 该款小程序相对来说还是挺强大的 这款小程序基本分段都是和外面几千块几百块的分段是一样的 基本就是从开场-情绪-聊天-升级-邀约-约会等几大分类开始 然后每一大分类下面都...