当前位置:首页 > CN2资讯 > 正文内容

swift AVSpeechSynthesizer 代理方法

2天前CN2资讯


代理是java程序中常用的一种开发思想,其中动态代理是切面编程中使用的,动态代理的概念为:通过使用代理类接口InvocationHandler实现对所有被代理类方法的调用,但除了调用被代理类的方法外,也会调用其他实例化在代理类中的方法,从而实现切面编程的思想。

用不恰当的比喻来解释的话:代理类就好比是苹果和三星的维修部门,苹果是一个接口,使用苹果手机的人是继承了苹果接口的具体实现类类;三星是一个其他的接口,使用三星的是继承了三星的具体实现类,如果苹果和三星只能使用自己的维修部门(代理类)那么这种方式就是静态代理,但是考虑到成本(代码重复)问题,所以两家想要共用一个维修部(代理)。在这个维修部(代理)中,当使用苹果的人来维修时,那么维修部将手机交给苹果的维修师进行维修,当使用三星的人来维修时,维修部就将手机交给三星的维修师。这就是动态代理的使用。切面编程思想就是,不管谁来维修手机,手机交给维修师以前都要在维修部前台的员工那里做一个登记、维修好后又需要在维修部会计那里算一下费用。这样将被代理的方法夹在了其他方法中间,这就是切面编程的思想。为了方便理解请分析下图:


由上图可以看出,当使用苹果的人去维修时,测试类会创建对应的实例对象,并调用代理类。当代理类被调用时,此时就会执行维修部的方法,而在执行“进行维修”方法以前,代理类会默认先执行“前台接待”方法,在执行完“进行维修”后,代理类又会执行“会计收费”,这就是动态代理与切面编程的使用。

下面通过代码来进行熟悉,代码的运行需求:在执行登录login()或regise()方法以前要先执行过滤方法,这样有效的防止传入错误信息。


/** * @author admin *这是登录的接口 */ public interface FileterTest { public void login(); //验证登录 public void regise(); //验证注册 } /** * @author admin * 这个是登录的实现类 */ public class LoginTest implements FileterTest { @Override public void login() { System.out.println("我是被代理的方法,我要登录"); } @Override public void regise() { System.out.println("I want to regise"); } } /** * @author admin *这是切面编程中的切入方法,在执行被代理方法以前先将数据进行过滤 */ public class Filter{ public void filter(){ System.out.println("我是过滤器,我属于切面编程,在执行被代理方法前要先执行我的方法"); } }/** * @author admin * 这是动态代理类 */ public class My_InvocationHandler implements InvocationHandler { Object obj; //获取被代理类的实例对象 public void setObj(Object obj){ this.obj=obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Filter f=new Filter(); f.filter();//切面方法,在执行被代理方法以前会执行过滤 Object object=method.invoke(obj, args); //invoke()在执行时会默认执行被代理的方法 return object; } } class MyProxy{ public static Object getProxy(Object obj){ My_InvocationHandler myInHandler=new My_InvocationHandler(); myInHandler.setObj(obj); //Proxy.newProxyInstance()三个参数分别为:调用需要被代理类的类名、调用别代理类的接口、调用要使用的代理类对象 return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), myInHandler); } } public class Test { public static void main(String[] args) { LoginTest login=new LoginTest(); //创建登录的实例化对象 //将要被代理的类方法添加到代理类中 FileterTest fil=(FileterTest) MyProxy.getProxy(login); //在执行的login()与regise()方法时,都会先执行过滤方法filter() fil.login(); fil.regise(); } }

希望对大家学习切面编程以及动态代理有所帮助,欢迎各位对我不足的地方提出建议。

    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/25077.html

    分享给朋友:

    “swift AVSpeechSynthesizer 代理方法” 的相关文章

    国外服务器推荐:提升您的在线业务效率的最佳选择

    在如今全球化的时代,选择合适的国外服务器显得尤为重要。互联网的快速发展让许多企业不仅仅局限于当地市场,跨国经营已成为常态。这种趋势使得大量用户开始寻找更为高效、灵活的服务器解决方案,以满足不同地区客户的需求。服务器不仅是维护在线业务的基础设施,还是保证用户体验的关键因素。 选择国外服务器时,不仅需要...

    全球主机交流论坛:提升技术的最佳平台

    全球主机论坛概述 在当今数字化时代,全球主机论坛扮演着越来越重要的角色。这些论坛不仅是技术爱好者的聚集地,更是为需要域名、主机、VPS和服务器信息的用户提供了一个交流的平台。我作为一名站长,经常在这样的论坛上交流经验、获取灵感和解决技术难题,论坛的存在极大地丰富了我的网络建设之旅。 主机论坛的定义其...

    选择最佳Gigabit VPS托管服务指南

    当我第一次听说Gigabit VPS时,我很快意识到它不仅是一个技术术语,而是一个可以极大改进在线业务性能的工具。那么,Gigabit VPS究竟是什么呢?简而言之,Gigabit VPS意指那些配备每秒10千兆位网络连接的虚拟专用服务器。这种高带宽的连接速度,显然适合那些需要流畅流媒体、快速文件传...

    VPS商家全攻略:选择适合你的虚拟专用服务器

    VPS商家概述 在数字化时代,VPS(虚拟专用服务器)服务逐渐成为企业和个人用户的重要选择。VPS不仅为用户提供了灵活性,而且在性能、控制权和安全性上都优于传统的共享主机。这使它成为许多需要独立环境来运行网站或应用程序的用户的理想解决方案。 选择VPS的用户通常追求更高的稳定性和可靠性。相比于共享主...

    如何在Vultr上添加适合的充值金额和选择合适的VPS方案

    Vultr概述 Vultr是一家在云服务领域颇有声誉的公司,它以提供高性能的虚拟专用服务器(VPS)而闻名。Vultr不仅在全球范围内拥有多个数据中心,还以其灵活的方案和易于扩展的功能,赢得了众多用户的青睐。在激烈的市场竞争中,Vultr凭借其合理的价格和优化的服务流程,使自己脱颖而出,成为许多个人...

    Bandwagon 意思与效应解析:理解群体行为的心理机制

    “Bandwagon”这个词听上去或许有些陌生,但它的意思和背景却十分有趣。简单来说,Bandwagon指的是一种说服技巧,通常用来引导他人追随某个观点或趋势。你有没有发现,在某些情况下,会有人因为周围大多数人都选择某种方式而随之附和?这种现象正是Bandwagon的核心思想。在这种情况下,个体的决...