静态代理

[size=large][color=darkred]代理类将扩展的功能在代理类中来实现,不破坏实现类的封装行[/color][/size]

已知接口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");
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值