本来已经转贴了.想一想,自己还是再做个笔记吧.印象更深. 好 .....那么 继续

在写好的类中.添加新的功能.一般是怎么做的呢?
1.静态代理
  参考代码static-proxy
1)首先写个接口吧

 1package com.zyl.proxy;
 2
 3public interface UserManager {
 4    
 5    public void addUer(String name,String password);
 6    
 7    public void delUser(String id);
 8    
 9    public void modifyUser(int id, String name, String password);
10    
11}
2)接口类的实现
 1package com.zyl.proxy;
 2
 3public class UserManagerImpl implements UserManager {
 4
 5
 6    public void addUer(String name, String password) {
 7       //添加日志/安全性检查
 8        //checksafe();
 9        //采用添加代理类的方法会如何?
10        System.out.println("UserManagerImpl.addUser()");
11
12    }

13
14    @Override
15    public void delUser(String id) {
16        //添加日志/安全性检查
17        //checksafe();
18           System.out.println("UserManagerImpl.delUser()");
19    }

20
21    @Override
22    public void modifyUser(int id, String name, String password) {
23        //添加日志/安全性检查
24        //checksafe();
25           System.out.println("UserManagerImpl.modifyUser()");
26
27    }

28//    private void checksafe(){
29//        System.out.println("检查安全性的方法");
30//    }
31}
比如添加checksafe()方法. 要在每个实现方法中调用checksafe(); (把代码中注释去掉后的效果)
这样做,有人会不满.不希望在实现类中出现其他7788的东西.
那么注释就别去了...加个代理吧.
3)代理类
 1package com.zyl.proxy;
 2
 3public class UserManagerImplProxy implements UserManager {
 4    //通过构造方法
 5    private UserManager usermanager;
 6    public UserManagerImplProxy(UserManager usermanager){
 7        this.usermanager=usermanager;
 8    }

 9    public void addUer(String name, String password) {
10        checksafe();
11        usermanager.addUer(name, password);
12        
13
14    }

15
16
17    public void delUser(String id) {
18        checksafe();
19        usermanager.delUser(id);
20    }

21
22
23    public void modifyUser(int id, String name, String password) {
24        checksafe();
25        usermanager.modifyUser(id, name, password);
26
27    }

28    private void checksafe(){
29        System.out.println("检查安全性的方法");
30    }

31//代理类的效果: 没有改变真实的实现,添加了需要的功能.可是在代理类中,代码里充斥着checksafe()这样的无关代码
32//静态代理不适用大量类需要添加功能的项目
33}

34
//代理类的效果: 没有改变真实的实现,添加了需要的功能.可是在代理类中,代码里充斥着checksafe()这样的无关代码;
//静态代理不适用大量类需要添加功能的项目;
//    第3行: 可以看到,代理类UserManagerImplProxy也是实现接口UserManager;
//    第6行:定义构造方法,传入UserManager类型的实例.实现接口的方法(addUser等);
//    在方法中加入安全检查新的方法checksafe()或者日志等7788的方法.
其实大同小异,在代理类中的方法,照样还是要加入添加的方法checksafe();
4)实现client
 1package com.zyl.ooxx;
 2
 3import com.zyl.proxy.UserManager;
 4import com.zyl.proxy.UserManagerImpl;
 5import com.zyl.proxy.UserManagerImplProxy;
 6
 7public class client {
 8
 9    public static void main(String[] args) {
10        UserManager usermanager =new UserManagerImpl();
11        //采用代理之后
12        UserManagerImplProxy usermanagerimplproxy=new UserManagerImplProxy(usermanager);
13        
14       // usermanager.addUer("帅哥", "11");
15        usermanagerimplproxy.addUer("帅哥2""password");
16    }

17
18}

19
打印结果如下:
1检查安全性的方法
2UserManagerImpl.addUser()
ok 静态代理就这样.