本來已經轉貼了.想一想,自己還是再做個筆記吧.印象更深. 好 .....那么 繼續

在寫好的類中.添加新的功能.一般是怎么做的呢?
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 靜態代理就這樣.