前言:
什么是代理模式?代理顾名思义就是帮别人做事情,那么代理模式也是一样的,不直接暴露真实的对象给调用者,而是通过代理的对象去调用。那么这样有什么作用呢?我们可以先写一个静态代理模式来看看。
1.我们先创建一个Girl接口:
package com.wei;
public interface Girl {
void sing();
}
2.然后我们创建一个RealGirl去实现这个接口:
package com.wei;
public class RealGirl implements Girl {
@Override
public void sing() {
System.out.println("RealGirl开始唱歌。。。");
}
}
3.接下来我们就可以创建一个经纪人Agent去代理:
package com.wei;
public class Agent implements Girl{
private RealGirl realGirl;
public Agent(RealGirl realGirl) { //传入对象
this.realGirl = realGirl;
}
@Override
public void sing() {
realGirl.sing(); //调用realGile的方法
}
}
4.最后我们可以去创建一个Client去调用代理看看:
package com.wei;
public class Client {
public static void main(String[] args) {
RealGirl realGirl = new RealGirl(); //创建RealGile
Agent agent = new Agent(realGirl); //创建Agent
agent.sing(); //调用代理Agent的sing方法
}
}
5.运行结果:
- 当然我们还可以在Client前后加一些方法:
//Cilent.java
package com.wei;
public class Client {
public static void main(String[] args) {
RealGirl realGirl = new RealGirl(); //创建RealGile
Agent agent = new Agent(realGirl); //创建Agent
agent.init();
agent.sing(); //调用代理Agent的sing方法
agent.distory();
}
}
//Agent.java
package com.wei;
public class Agent implements Girl{
private RealGirl realGirl;
public Agent(RealGirl realGirl) { //传入对象
this.realGirl = realGirl;
}
void init() {
System.out.println("唱歌开始。。。");
}
@Override
public void sing() {
realGirl.sing();
}
void distory() {
System.out.println("唱歌结束。。。");
}
}
- 然后我们再调用:
- 这样我们就可以对真实的对象前后加上一些增强方法,而不影响到真实的代码。但是这样的话要是一个代理代理很多对象的话代码耦合性不是很高吗,所以我们就需要用到动态代理模式。