代理模式
顾名思义,就是调用者不直接持有目标对象的引用,而是通过实例化一个中介对象,通过中介对象完成对目标对象的操作。
它的一个主要作用在于执行目标对象的方法之前和之后可以执行一些其他的操作,同时不会直接持有目标对象的引用。
在activity的启动过程中,ActivityManagerService就有个代理对象ActivityManagerProxy,它位于应用所在进程中,应用进程通过它来调用ActivityManagerService提供的功能,这个代理对象不是应用进程直接创建的,而是通过调用ActiviyManagerNative类的工具方法getDefault方法得到的,所以在应用进程里通常这样启动Activty:ActivityManagerNative.getDefault().startActivity(),好了扯远了,只是想举个实际应用的例子,这部分还是单开一篇文章来整理吧,关于Activity的启动流程还是值得细细咀嚼一下的,本篇文章以一个简单的例子来说明代理模式的原理:
先看下实现代理模式组成:
1.抽象目标对象
2.目标对象
3.代理对象
直接看代码吧:
抽象目标对象:
public abstract class AbstractObject {
//操作
public abstract void operation();
}
目标对象
public class TargetObject extends AbstractObject {
@Override
public void operation() {
//一些操作
Log.d("Proxy","目标对象的一些操作");
}
}
代理对象
public class ProxyObject extends AbstractObject {
TargetObject realObject = new TargetObject();
@Override
public void operation() {
//调用目标对象之前可以做相关操作
Log.d("Proxy","调用目标对象之前的操作");
realObject.operation();
//调用目标对象之后可以做相关操作
Log.d("Proxy","调用目标对象之前的操作");
}
}
开始调用:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AbstractObject obj = new ProxyObject();
obj.operation();
}
}
打印结果为: