静态代理模式(StaticProxy)

真实对象和代理对象都要实现同一个接口, 确保拥有相同方法名的方法, 代理对象代理真实角色, 代理对象的方法可以增加真实对象同名方法中没有的方法

  1. public class StaticProxy {
  2. //以结婚为例
  3. public static void main(String[] args) {
  4. //创建真实对象实例
  5. Person wang = new Person("Wang");
  6. //创建代理对象实例
  7. MarryCompany company = new MarryCompany(wang);
  8. //调用代理对象的方法,间接调用真实对象的方法和代理对象的其他方法
  9. company.happyMarry();
  10. }
  11. //接口
  12. interface Marry {
  13. void happyMarry();
  14. }
  15. //真实对象
  16. static class Person implements Marry {
  17. private String name;
  18. public Person(String name) {
  19. this.name = name;
  20. }
  21. //真实对象中实现的方法
  22. @Override
  23. public void happyMarry() {
  24. System.out.println(name + " 要结婚了,开心!");
  25. }
  26. }
  27. //代理对象
  28. static class MarryCompany implements Marry {
  29. private Marry target;
  30. public MarryCompany(Marry target) {
  31. this.target = target;
  32. }
  33. //代理对象的同一个方法中可以实现更多功能
  34. @Override
  35. public void happyMarry() {
  36. target.happyMarry(); //真实对象的方法
  37. thing1(); //代理对象增加的方法
  38. thing2();
  39. thing3();
  40. }
  41. private void thing3() {
  42. System.out.println("婚后,结清款项");
  43. }
  44. private void thing2() {
  45. System.out.println("宴请亲朋好友");
  46. }
  47. private void thing1() {
  48. System.out.println("结婚前:布置现场");
  49. }
  50. }
  51. }