静态代理

   下面是用户逻辑接口

 

package com.als.spring;

public interface UserManager {

	/**
	 * 添加用户
	 * @param userName 用户名称
	 * @param password 用户密码
	 */
	public void addUser(String userName, String password) ;
	
	/**
	 * 删除用户
	 * @param uid 用户id
	 */
	public void deleteUser(int uid) ;
	
	/**
	 * 修改用户
	 * @param uid 用户id
	 * @param userName 用户名
	 * @param password 用户密码
	 */
	public void modifyUser(int uid, String userName, String password) ;
	
	/**
	 * 查找用户
	 * @param id 用户id
	 * @return
	 */
	public String findUserById(int id) ;
	
	
}

 

 

下面是用户逻辑的实现类

package com.als.spring;

/**
 * 用户业务逻辑的实现
 * @author Administrator liushaoke
 *
 */
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 deleteUser(int uid) {
		// TODO Auto-generated method stub
		System.out.println("---------UserManagerImpl.deleteUser()--------");
	}

	@Override
	public String findUserById(int id) {
		System.out.println("---------UserManagerImpl.findUserById()--------");
		return "liushaoke";
	}

	@Override
	public void modifyUser(int uid, String userName, String password) {
		// TODO Auto-generated method stub
		System.out.println("---------UserManagerImpl.modifyUser()--------");
	}

}

 

 

下面用静态代理来实现同样的功能,只是在之前添加过一个检查安全性方法

 

package com.als.spring;

public class UserManagerImplProxy implements UserManager {

	private UserManager userManager = null ;
	
	public UserManagerImplProxy(UserManager userManager) {
		this.userManager = userManager ;
	}
	
	@Override
	public void addUser(String userName, String password) {
		checkSecurity() ;
		userManager.addUser(userName, password) ;
	}

	@Override
	public void deleteUser(int uid) {
		checkSecurity() ;
		userManager.deleteUser(uid) ;
		
	}

	@Override
	public String findUserById(int id) {
		checkSecurity() ;
		userManager.findUserById(id) ;
		return null;
	}

	@Override
	public void modifyUser(int uid, String userName, String password) {
		checkSecurity() ;
		userManager.modifyUser(uid, userName, password) ;
	}
	
	/**
	 * 检查安全性
	 */
	private void checkSecurity() {
		System.out.println("-------checkSecurity-------");
	}	

}

 

代理模式是常用的 Java 设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息,过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本省并不是真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。

静态代理类:由程序员创建或由特定工具自动生成源代码,再对其编译,程序运行前,代理类的 class 文件就已经存在了。

 

    可以看出静态代理类有一个很不爽的缺点:当如果接口加一个方法,所有的实现类和代理类里都需要做个实现。这就增加了代码的复杂度。动态代理就可以避免这个缺点。 

 

 

 

 

你可能感兴趣的:(设计模式,spring)