首页 > 编程 > Java > 正文

Java静态代理模式理解和实现

2019-11-08 01:00:12
字体:
来源:转载
供稿:网友
今天在看Android里自定义View时,发现了一个问题,Android版本在3.0以下的无法正常使用属性动画,只能通过开源库nineoldandroid来完成动画效果,否则使用其他方式都会出现问题。在使用库中的方法来进行实际效果实现时,查看了其中几个方法的具体实现,涉及到代理模式,刚看到时感觉一脸蒙圈,所以,通过几个大神的博客了解了java中的代理模式使用,现在自己就来简单的归纳和总结一下。 首先,**代理模式是指让一个对象通过代理的方式被其控制和使用其功能**。简而言之,即通过第三方来使用一个不能被直接接触的功能。举一个例子,A公司发售了某款产品(PRoduct()),销量一直名列前茅,在国内行情十分火爆。为了更多的盈利和扩大市场,A公司决定将此产品推广到国外,希望在国外市场进行销售。但是A公司遇到了一个致命的问题,在海外市场,无论是政策还是市场需求,文化背景都与国内天差地别,所以发现自己的销量一直不好,怎么办呢? 在这整个过程中,B公司就是一个代理,因为A公司在海外有诸多不便,所以将各种杂七杂八的推广事务交由B公司负责,而自己只负责将产品做好,其他的所有事情有B公司代替其处理。A公司与B公司都有相同的目标,就是完成好自己分内的工作D,这是一个共同的目标,只有同时完成了这一个目标,才能将代理这件事做好。这就是我认为的静态代理模式的整个过程。 现在来将这个例子通过代码的方式呈现出来。

首先,明确了共同的目标D,完成各方的工作。

package proxy;public interface Goal_D { //A与B公司的共同目标,完成自己的工作 void work();}

其次,A公司和B公司明确自己需要完成的工作,并且知晓了自己的目标

package proxy;public class Company_A implements Goal_D{ public Company_A() { } @Override public void work(){ System.out.println("生产热销产品,并提供给B公司"); }}package proxy;public class Company_B implements Goal_D{ private Company_A company_A = null; public Company_B(Company_A company_A) { this.company_A = company_A; } @Override public void work(){ advertising(); company_A.work(); getOrder(); } private void advertising(){ System.out.println("B公司为产品进行推广工作"); } private void getOrder(){ System.out.println("B公司获得订单,收费,完成交易"); }}

最后,B公司与客户C进行了谈判,完成了交易

package proxy;public class Client_C { public static void main(String[] args) { //通过B公司宣传了解到了A公司产品后,向B公司协商购买事宜 Company_A company_A = new Company_A(); Company_B company_B = new Company_B(company_A); //最终完成购买 company_B.work(); }}

运行结果为:

B公司为产品进行推广工作 生产热销产品,并提供给B公司 B公司获得订单,收费,完成交易

**这就是一个简单的静态代理模式代码。** 接着Android部分进行一下总结,使用代理模式之后,nineoldandroid开源库也就能过保证在不修改原来的代码的基础上,进一步完善动画效果,并且向3.0以下的系统进行兼容。从而完成了整个动画效果的实现,具体的代码就不再一一展示,我会在继续熟悉这一块的知识,同时,了解其实现过程。**如果有笔误,或者我理解上有问题的地方,欢迎指出。**
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表