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

  • 相关阅读:
    04_特征工程
    03_特征清洗
    02_数据探索
    01_简介
    cache是什么文件?
    gulp详细入门教程
    HTML5实战与剖析之触摸事件(touchstart、touchmove和touchend)
    h4和h5的区别
    弹性盒布局
    js面向对象
  • 原文地址:https://www.cnblogs.com/hwgok/p/5424355.html
Copyright © 2011-2022 走看看