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

  • 相关阅读:
    Oracle 实现数据表插入时主键列自增
    Java BigDecimal 加减乘除用法
    php最常见最经典的算法题(1)
    2、php-选择排序方法
    1、php-冒泡排序方法
    65G-一系列Go语言课程Go基础知识高级Go项目战斗New Go语言和区块链开发实践课程
    css
    python基础
    SEO优化指南
    转载GXT之旅
  • 原文地址:https://www.cnblogs.com/hwgok/p/5424355.html
Copyright © 2011-2022 走看看