`
wlh269
  • 浏览: 447283 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

静态代理

阅读更多
代理类将扩展的功能在代理类中来实现,不破坏实现类的封装行

已知接口UserManager.java含有四个方法:
 
 package com.wlh;
public interface UserManager {
  public void addUser(String username,String pwd);
  public void delUser(int id);
  public void findUser(int id);
  public void updateUser(int id ,String username,String pwd);
}


类:UserManagerImpl.java实现了以上接口的方法:
package com.wlh;
public class UserManagerImpl implements UserManager {

	public void addUser(String username, String pwd) {
      System.out.println("====addUser()=====");
	}

	public void delUser(int id) {
		 System.out.println("====delUser()=====");
	}

	public void findUser(int id) {
		 System.out.println("====findUser()=====");
	}

	public void updateUser(int id, String username, String pwd) {
		 System.out.println("====updateUser()=====");
	}

}


现在有需求要在实现类中的每个方法执行前要添加一段代码,完成完全性检查的功能
最简单的做法我们可以在实现类中添加一个方法如下:
public void checkSecurity(){
		System.out.println("=====checkSecurity()======");
 }


分析以上做法,向实现类中添加方法,破坏了实现类UserManagerImpl.java的封闭性,
如果随后又需求在实现类的每个方法中添加新功能,这样。。。。得不停的改动实现类。。。。。我们的解决办法是,利用代理模式:
   代理类的设计原则是:是代理类实现我们接口(空实现),在代理类中添加一个构造方法开接收我们的实现类的实例。然后将实现类中要扩展的功能在代理类中单独写成一个方法,具体如下:
package com.wlh;
public class UserManagerImplProxy implements UserManager {
          
          private UserManager userManager;
    //===构造方法接收实现类UserManagerImpl.java的实例===//
     public UserManagerImplProxy(UserManager userManager){
	this.userManager=userManager;
	}
	
   public void addUser(String username, String pwd) {
		checkSecurity();
		this.userManager.addUser(username, pwd);
	}

	public void delUser(int id) {
		checkSecurity();
		this.userManager.delUser(id);
	}

	public void findUser(int id) {
		checkSecurity();
		this.userManager.findUser(id);
	}

	public void updateUser(int id, String username, String pwd) {
		checkSecurity();
		this.userManager.updateUser(id, username, pwd);
	}
	
	public void checkSecurity(){
		System.out.println("=====checkSecurity()======");
	}

}



客户端调用类:

package client;
import com.wlh.UserManager;
import com.wlh.UserManagerImpl;
import com.wlh.UserManagerImplProxy;


public class Client {
	
public static void main(String []args){
    //构造方法接收实现类的对象
  UserManager userManager=new UserManagerImplProxy(new UserManagerImpl());
	userManager.addUser("wlh", "wlh");
}
	
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics