定义

为其他的对象提供一个代理对象,并且由这个代理对象来控制这个对象的访问。

特点

  1. 代理对象和被代理对象都需要实现同一个接口或者继承同一个抽象类。
  2. 代理对象控制被代理对象的访问。

    图解

    image.png
    这是代理模式的通用UML图,涉及到以下几个角色:
  • 抽象主题角色:定义了被代理角色和代理角色的共同接口或者抽象类
  • 被代理角色:实现或者继承抽象主题角色,定义实现具体业务逻辑的实现。
  • 代理角色:实现或者继承抽象主题角色,持有被代理角色的引用,控制和限制被代理角色实现,并且拥有自己的处理方法。(可能需要进行预处理和善后的工作)

示例

  1. package test24;
  2. /**
  3. * Created By Intellij IDEA
  4. *
  5. * @author Xinrui Yu
  6. * @date 2021/12/6 21:40 星期一
  7. */
  8. public class Application {
  9. public static void main(String[] args) {
  10. People people = new People();
  11. Student student = new Student();
  12. // 会根据我们传入的对象的不同而调用对应的具体方法
  13. RunFactory runFactory = new RunFactory(people);
  14. runFactory.run();
  15. runFactory = new RunFactory(student);
  16. runFactory.run();
  17. }
  18. }
  19. interface RunInterface{
  20. public void run();
  21. }
  22. class RunFactory implements RunInterface{
  23. private RunInterface run;
  24. public RunFactory(RunInterface run) {
  25. this.run = run;
  26. }
  27. @Override
  28. public void run(){
  29. System.out.println("**************************");
  30. run.run();
  31. System.out.println("**************************");
  32. }
  33. }
  34. class People implements RunInterface{
  35. @Override
  36. public void run() {
  37. System.out.println("人在跑");
  38. }
  39. }
  40. class Student implements RunInterface{
  41. @Override
  42. public void run() {
  43. System.out.println("学生在跑");
  44. }
  45. }

image.png