代理模式
静态代理
静态代理是一种设计模式,它可以在不修改原始类的情况下增强其功能。静态代理的好处有以下几点:
- 它可以实现对目标对象的访问控制,比如说只有满足一定条件的用户才能调用目标对象的方法。
- 它可以实现对目标对象的功能扩展,比如说在目标对象的方法执行前后添加一些额外的逻辑,比如日志、缓存、事务等。
- 它可以实现对目标对象的解耦,比如说将目标对象和调用者分离,使得调用者不需要知道目标对象的具体实现细节。
例如:
使用黄牛代理,帮我买演唱会门票
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(); } }
|
动态代理
未完待续…