代理模式

静态代理

静态代理是一种设计模式,它可以在不修改原始类的情况下增强其功能。静态代理的好处有以下几点:

  • 它可以实现对目标对象的访问控制,比如说只有满足一定条件的用户才能调用目标对象的方法。
  • 它可以实现对目标对象的功能扩展,比如说在目标对象的方法执行前后添加一些额外的逻辑,比如日志、缓存、事务等。
  • 它可以实现对目标对象的解耦,比如说将目标对象和调用者分离,使得调用者不需要知道目标对象的具体实现细节。

例如:

使用黄牛代理,帮我买演唱会门票

Human.java

1
2
3
4
5
6
7
8
9
package Thread.StaticProxy;

public interface Human {

void sleep();
void eat();
void lookConcert();
}

Me.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package Thread.StaticProxy;

public class Me implements Human{
@Override
public void sleep() {
System.out.println("我睡觉");
}

@Override
public void eat() {
System.out.println("我吃饭");
}

@Override
public void lookConcert() {
System.out.println("我看演唱会");
}
}

HuangNiu.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package Thread.StaticProxy;

public class HuangNiu implements Human{
private Me me;

@Override
public void sleep() {
System.out.println("黄牛替我睡觉");
}

@Override
public void eat() {
System.out.println("黄牛替我吃饭");
}

@Override
public void lookConcert() {
this.bug();
me.lookConcert();
}
public void bug(){
System.out.println("黄牛替我买演唱会门票");
}
}

test.java

1
2
3
4
5
6
7
8
9
package Thread.StaticProxy;

public class test {
public static void main(String[] args) {
HuangNiu huangNiu = new HuangNiu();
huangNiu.lookConcert();
}
}

动态代理

未完待续…