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

    代理模式:
    为其他对象提供一种代理以控制这个对象的访问
    在某些情况下,一个客户不能或者不想直接引用另外一个对象,而代理对象可以在客户端和目标对象之间起到中介作用

    代理模式中的角色:
    抽象角色:声明抽象方法的接口
    代理角色:持有真实对象的引用,和真实对象一样实现所有抽象角色声明的方法,并且在实现中代用真实角色的访问,增加其他方法可以在实现中调用,以完成的真实角色的控制
    真实角色:实现抽象角色声明的所有方法

    抽象类:UserManager

    package com.bjpowernode.spring;
    
    public interface UserManager {
    
        public void addUser(String username, String password);
        
        public void delUser(int userId);
        
        public String findUser(int userId);
        
        public void modifyUser(int userId, String username, String password);
        
        
    }

    真实实现类:UserMangerImpl

    package com.bjpowernode.spring;
    
    public class UserManagerImpl implements UserManager{
    
        @Override
        public void addUser(String username, String password) {
            // TODO Auto-generated method stub
            System.out.println("------------UserManagerImpl.addUser()------------------");
        }
    
        @Override
        public void delUser(int userId) {
            // TODO Auto-generated method stub
            System.out.println("------------UserManagerImpl.delUser()------------------");
        }
    
        @Override
        public String findUser(int userId) {
            // TODO Auto-generated method stub
            System.out.println("------------UserManagerImpl.findUser()------------------");
            return "张三";
        }
    
        @Override
        public void modifyUser(int userId, String username, String password) {
            // TODO Auto-generated method stub
            System.out.println("------------UserManagerImpl.modifyUser()------------------");
        }
    
    }

    代理类:UserManagerImplProxy

    package com.bjpowernode.spring;
    
    public class UserManagerImplProxy implements UserManager {
    
        private UserManager userManager;
        
    //    public UserManagerImplProxy(UserManager userManager){
    //        this.userManager = userManager;
    //    }
        
        public UserManagerImplProxy(){
            this.userManager = new UserManagerImpl();
        }
        
        @Override
        public void addUser(String username, String password) {
            // TODO Auto-generated method stub
            checkSecurity();
            userManager.addUser(username, password);
        }
    
        @Override
        public void delUser(int userId) {
            // TODO Auto-generated method stub
            checkSecurity();
            userManager.delUser(userId);
        }
    
        @Override
        public String findUser(int userId) {
            // TODO Auto-generated method stub
            checkSecurity();
            return userManager.findUser(userId);
        }
    
        @Override
        public void modifyUser(int userId, String username, String password) {
            // TODO Auto-generated method stub
            checkSecurity();
            userManager.modifyUser(userId, username, password);
        }
    
        private void checkSecurity(){
            System.out.println("-------------checkSecurity()---------------");
        }
    }

    客户端测试:Client

    package com.bjpowernode.spring;
    
    public class Client {
    
        public static void main(String[] args){
    //        UserManager userManger = new UserManagerImplProxy(new UserManagerImpl());
            UserManager userManger = new UserManagerImplProxy();
            String username = "张三";
            String password = "123456";
            userManger.addUser(username, password);
        }
    }

    问题:

    如果有多个类需要代理,就需要对每个类提供一个对应的代理类,会导致大量的代理类.这个问题需要使用动态代理来实现

  • 相关阅读:
    RK Android7.1 电池电量
    Bat
    RK: 调试 4G模块移远 EC600S-CN
    RK: 调试4G模块 合宙Air720
    关系代数 wiki
    大端与小端的区别
    Microsoft 365 解决方案:如何基于已存在的列表或Excel新建列表
    Microsoft 365 新功能速递:Teams的会议记录将支持对内外部用户共享等新用户体验
    Microsoft 365 解决方案:Office 365 ATP 使用户的收件箱免受钓鱼攻击
    O365事件ID MO222965 -无法访问 Microsoft 365服务
  • 原文地址:https://www.cnblogs.com/djoker/p/6240497.html
Copyright © 2011-2022 走看看