• 第二节:代理模式——静态代理


    一、静态代理

      1、静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类。

      

    二、应用实例

      1、具体要求

        (1)定义一个接口:ITeacherDAO

        (2)目标对象 TeacherDAO 实现接口 ITeacherDAO

        (3)使用静态代理方式,就需要在代理对象 TeacherDAOProxy 中也实现 ITeacherDAO

        (4)调用的时候通过调用代理对象的方法来调用目标对象

        (5)特别提示:代理对象与目标对象要实现相同的接口,然后通过调用相同的方法来调用目标对象的方法;

      2、思路分析与类图

          

      3、代码实现

        接口:

    1 /**
    2  * 接口
    3  */
    4 public interface ITeacher {
    5 
    6     void teach();
    7 }

        被代理类:

    1 /**
    2  * 被代理对象
    3  */
    4 public class TeacherDao implements ITeacher{
    5     @Override
    6     public void teach() {
    7         System.out.println("老师授课中。。。。");
    8     }
    9 }

        代理类:

     1 /**
     2  * 代理对象,静态代理
     3  */
     4 public class TeacherDaoProxy implements ITeacher{
     5 
     6     /**
     7      *  目标对象,通过接口来聚合
     8      */
     9     private ITeacher target;
    10 
    11     /**
    12      * 构造器
    13      * @param target
    14      */
    15     public TeacherDaoProxy(ITeacher target) {
    16         this.target = target;
    17     }
    18 
    19     @Override
    20     public void teach() {
    21         System.out.println("开始代理,完成某些操作....");
    22         target.teach();
    23         System.out.println("提交");
    24     }
    25 }

        客户端:

     1 public class Client {
     2     public static void main(String[] args) {
     3         //创建目标对象,被代理对象
     4         TeacherDao teacherDao = new TeacherDao();
     5 
     6         //创建代理对象,同时把被代理对象传递给代理对象
     7         TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao);
     8 
     9         //通过代理对象,调用到被代理对象的方法
    10         //即:执行的是代理对象的方法,代理对象再去调用目标对象的方法
    11         teacherDaoProxy.teach();
    12     }
    13 }

    三、静态代理小结

      1、优点:在不修改目标对象的功能前提下,能通过代理对象对目标功能扩展;

      2、缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类;

      3、一旦接口增加方法,目标对象与代理对象都要维护;

  • 相关阅读:
    状态模式
    $和@的特殊处理
    Windows服务调试状态下用Console启动
    AutoResetEvent
    await和async
    计算a,b,c的排列组合
    百度地图:通过经纬度获得位置信息和距离
    装饰模式
    vue+h-ui+layUI完成列表页及编辑页
    为什么memset不能将数组元素初始化为1?
  • 原文地址:https://www.cnblogs.com/niujifei/p/14359247.html
Copyright © 2020-2023  润新知