[size=large][color=darkred]代理类将扩展的功能在代理类中来实现,不破坏实现类的封装行[/color][/size]
已知接口UserManager.java含有四个方法:
类:UserManagerImpl.java实现了以上接口的方法:
现在有需求要在实现类中的每个方法执行前要添加一段代码,完成完全性检查的功能
最简单的做法我们可以在实现类中添加一个方法如下:
分析以上做法,向实现类中添加方法,破坏了实现类UserManagerImpl.java的封闭性,
如果随后又需求在实现类的每个方法中添加新功能,这样。。。。得不停的改动实现类。。。。。我们的解决办法是,利用代理模式:
代理类的设计原则是:是代理类实现我们接口(空实现),在代理类中添加一个构造方法开接收我们的实现类的实例。然后将实现类中要扩展的功能在代理类中单独写成一个方法,具体如下:
客户端调用类:
已知接口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");
}
}