zoukankan      html  css  js  c++  java
  • 设计模式 代理模式之静态代理

    静态代理要搞清楚三个关系:客户类   代理类   委托类

                 代理类的行为要类似且强于委托类(实现方法有1.继承,2.代理类与委托类实现共同的接口(首选))

    /**
    * 用静态代理模式完成日志的操作
    * @author Administrator
    *
    */
    public class UserAction {
      private UserDao userDao = UserDaoFac.newUserDao();
      public void add(){
        System.out.println("========UserAction========");
        userDao.add();
      }
      public static void main(String[] args) {
        new UserAction().add();
      }
    }

    public interface UserDao {   //接口
      public void add();
    }

    public class UserDaoImpl implements UserDao{   委托类
      @Override
      public void add() {
        System.out.println("=====UserDao======");
        // System.out.println("完成日志操作!!!");//侵入式 植入式代码
      }
    }

    public class UserDaoFac {     //工厂
      public static UserDao newUserDao(){
        return new UserPowerProxy(new UserLogProxy(new UserDaoImpl()));
      }
    }

    public class UserLogProxy implements UserDao {   //代理类
      private UserDao userDao;
      //构造注入
      public UserLogProxy(UserDao userDao) {
        super();
        this.userDao = userDao;
      }
      @Override
      public void add() {
        userDao.add();//把委托类的活干了
        System.out.println("添加了日志操作");
      }
    }

    public class UserPowerProxy implements UserDao {  //代理类
      private UserDao userDao;
      //构造注入
      public UserPowerProxy(UserDao userDao) {
        super();
        this.userDao = userDao;
      }
      @Override
      public void add() {
        System.out.println("增加一个权限判断");
        userDao.add();
      }
    }

  • 相关阅读:
    HDU2222 自动机(学习中)
    POJ 2289(多重匹配+二分)
    POJ 1486二分图的必要边
    二分图
    2015陕西 并查集
    Hdu2680 最短路
    函数调用约定
    用01随机函数构造[a,b]整数范围随机数
    hello
    Ubuntu 16.04 install R language
  • 原文地址:https://www.cnblogs.com/hwgok/p/5424355.html
Copyright © 2011-2022 走看看