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();
      }
    }

  • 相关阅读:
    BIND简易教程(2):BIND视图配置
    BIND简易教程(1):安装及基本配置
    大学本科计算机专业应该学点什么?
    Bukkit之yaml动态读取
    将指定世界中的指定位置的Block转化为箱子
    iframe中父页面与子页面的传值方法
    ajax提交数据
    a标签响应onclick事件,并且不执行href动作
    jsp重新打开一个新的页面
    java.lang.NoClassDefFoundError: org/hibernate/QueryTimeoutException
  • 原文地址:https://www.cnblogs.com/hwgok/p/5424355.html
Copyright © 2011-2022 走看看