第六讲 静态代理

一、静态代理的角色分析

     抽象角色:一般使用接口或者抽象类来实现。
     真实角色:被代理的角色。
     代理角色:代理真实角色。代理真实角色后一般会做一些附属操作。
     客户:使用代理角色来进行一些操作。


二、代码实现

      模拟顾客找中介租房:

      Rent.java --- 抽象角色:

public interface Rent {
     
      public void rent();
     
}

      Host.java --- 真实角色:

public class Host implements Rent {
     
      public void rent() {
           System. out .println( "房屋出租" );
     }
}

      Proxy.java --- 代理角色:

public class Proxy implements Rent {
     
      private Host host ;
     
      public Proxy() {
            super ();
     }
     
      public Proxy(Host host ) {
            super ();
            this . host = host ;
     }
      public void setHost(Host host ) {
            this . host = host ;
     }
     
      //租房
      public void rent() {
           seeHouse();
            host .rent();
           fare();
     }
     
      //看房
      private void seeHouse() {
           System. out .println( "带房客看房" );
     }
     
      //收中介费
      private void fare() {
           System. out .println( "收取中介费" );
     }
     
}

      Client.java --- 客户:

public class Client {
     
      public static void main(String[] args ) {
           Host host = new Host();
           Proxy proxy = new Proxy( host );
            proxy .rent();
     }
     
}

三、使用静态代理的优缺点

      优点:

   使得真实角色处理的业务更加纯粹,不再去关注一些公共的事情。
   公共的业务由代理来完成 --- 实现了业务的分工。
   公共业务发生扩展时变得更加集中和方便。

      缺点:

   类多了 --- 多了代理类。工作量变大了。开发效率降低了。

   为了弥补缺点,就出现了动态代理


四、使用静态代理前后对比

      以service为例:

public interface UserService {
     
      public void add();
     
      public void update();
     
      public void delete();
     
      public void search();
     
}

      不使用:

public class UserServiceImpl implements UserService {
      public void add() {
           log( "add" );
           System. out .println( "增加用户" );
     }
      public void update() {
           log( "update" );
           System. out .println( "修改用户" );
     }
      public void delete() {
           log( "delete" );
           System. out .println( "删除用户" );
     }
      public void search() {
           log( "search" );
           System. out .println( "查询用户" );
     }
      public void log(String methodName ) {
           System. out .println( "执行" + methodName + "方法" );
     }
     
}

      使用:

public class UserServiceImpl implements UserService {
      public void add() {
           System. out .println( "增加用户" );
     }
      public void update() {
           System. out .println( "修改用户" );
     }
      public void delete() {
           System. out .println( "删除用户" );
     }
      public void search() {
           System. out .println( "查询用户" );
     }
}

public class UserServiceProxy implements UserService {
      private UserService userService ;
     
      public void add() {
           log( "add" );
            userService .add();
     }
      public void update() {
           log( "update" );
            userService .update();
     }
      public void delete() {
           log( "delete" );
            userService .delete();
     }
      public void search() {
           log( "search" );
            userService .search();
     }
      public void log(String methodName ) {
           System. out .println( "执行" + methodName + "方法" );
     }
     
}

   每写一个service就要编写对应的proxy。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值