代理模式之静态代理

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

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

抽象类: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);
    }
}

 

问题:

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

 

posted @ 2016-12-31 23:28  喝杯茶  阅读(327)  评论(0编辑  收藏  举报