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

   今天在看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以下的系统进行兼容。从而完成了整个动画效果的实现,具体的代码就不再一一展示,我会在继续熟悉这一块的知识,同时,了解其实现过程。


**如果有笔误,或者我理解上有问题的地方,欢迎指出。**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值