思路:
    1. 代理类与委托类实现同一接口
    2. 在委托类中实现功能,在代理类的方法中引用委托类的同名方法
    3. 外部类调用委托类某个方法时,直接以接口指向代理类的实例,正式代理的意义:屏蔽。
    场景:
    1. 当我们想要隐藏某个类时,可以为其提供代理类
    2. 当一个类需要对不同的调用者提供不同的调用权限时,可以使用代理类来实现(代理类不一定只有一个,可以建立多个代理类进行实现,也可以在一个代理类中进行权限判断来进行不同权限的调用)
    3. 当我们要扩展某个类的某个功能时,可以使用代理模式,在代理类中进行简单扩展(只针对简单扩展,可以在引用委托类的语句之前与之后进行)
    特点:
    代理模式虽然实现了调用者与委托类之间的强耦合,但是却增加了代理类与委托类之间的强耦合,而且增加代理类之后明显会增加处理时间,拖慢处理时间。

    1. /**
    2. * 自然人
    3. */
    4. public interface ZiRanRen {
    5. void quanLi();
    6. }
    1. /**
    2. * 委托人
    3. */
    4. public class Mayun implements ZiRanRen {
    5. public void eat() {
    6. System.out.println("吃饭");
    7. }
    8. public void drink() {
    9. System.out.println("喝酒");
    10. }
    11. @Override
    12. public void quanLi() {
    13. System.out.println("我赋予我的代理律师来行使权力");
    14. }
    15. }
    1. /**
    2. * 律师
    3. */
    4. public class LvShi implements ZiRanRen {
    5. @Override
    6. public void quanLi() {
    7. new Mayun();
    8. }
    9. }
    1. public class Clienter {
    2. public static void main(String[] args) {
    3. ZiRanRen ls = new LvShi();
    4. ls.quanLi();
    5. }
    6. }
    7. //我赋予我的代理律师来行使权力