今天学习了为什么要使用代理类,和静态代理类.
package zhc.love.dj;
public interface UserManger {
public void addUser(String name,String password);
public void delUser(int id) ;
public void modUser(int id,String name,String password);
}
package zhc.love.dj;
public class UserMangerImp implements UserManger {
public void addUser(String name, String password) {
System.out.println("==============UserMangerImp.addUser()==============================");
}
public void delUser(int id) {
System.out.println("==============UserMangerImp.delUser()==============================");
}
public void modUser(int id, String name, String password) {
System.out.println("==============UserMangerImp.modUser()==============================");
}
/* 1 .普通做法:在业务类代码里加入了与业务无关的方法,比如安全性检查,日志记录,使得类的职责模糊,应该是
* 一个类该添加用户就添加用户,删除就删除,而这个例子把安全性,日志都加入,似的职责混乱.
* 每个方法的实现都加入了该方法checkSecurity()
* 这样使得大量代码冗余,在各个业务层混杂了很多类似的代码,不利于类的管理,
public void addUser(String name, String password) {
this.checkSecurity();
System.out.println("==============UserMangerImp.addUser()==============================");
}
public void delUser(int id) {
this.checkSecurity();
System.out.println("==============UserMangerImp.delUser()==============================");
}
public void modUser(int id, String name, String password) {
this.checkSecurity();
System.out.println("==============UserMangerImp.modUser()==============================");
}
public void checkSecurity(){
System.out.println("=========checkSecurity()=========");
}
*/
}
package zhc.love.dj;
public class UserMangerImpProxy implements UserManger {
/**
* 增加静态代理类,使得在UserMangerImp类的实现中不夹杂很多跟类无关的代码,不过还是没有解决大量代码
* 重复添加的问题,静态代理只适合代理类少的类
*/
UserManger userManger ;
public UserMangerImpProxy(){
userManger = new UserMangerImp();
}
public void addUser(String name, String password) {
checkSecurity();
userManger.addUser(name, password);
}
public void delUser(int id) {
checkSecurity();
userManger.delUser(id);
}
public void modUser(int id, String name, String password) {
checkSecurity();
userManger.modUser(id, name, password);
}
public void checkSecurity(){
System.out.println("=========checkSecurity()=========");
}
}
package zhc.love.dj;
public class Test {
public static void main(String[] args){
/* 1.普通情况来做,只要类调用就会调用方法
UserManger userManger = new UserMangerImp();
userManger.addUser("zhang", "china");
*/
//静态代理类实现
UserManger userManger = new UserMangerImpProxy();
userManger.addUser("aaa", "bbb");
}
}