zoukankan      html  css  js  c++  java
  • 第二节:代理模式——静态代理

    一、静态代理

      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、一旦接口增加方法,目标对象与代理对象都要维护;

  • 相关阅读:
    45 个非常有用的 Oracle 查询语句
    [转载]java图片缩放处理
    [转载]java图片缩放处理
    十步完全理解SQL
    十步完全理解SQL
    day04_20170521_函数(二)
    to disable the entity lazy load, The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
    wordpress mobile templates
    linq query, using int.parse to convert varchar to int while orderby
    appfabric 简单应用
  • 原文地址:https://www.cnblogs.com/niujifei/p/14359247.html
Copyright © 2011-2022 走看看