本來已經轉貼了.想一想,自己還是再做個筆記吧.印象更深. 好 .....那么 繼續
在寫好的類中.添加新的功能.一般是怎么做的呢?
1.靜態代理
參考代碼static-proxy
1)首先寫個接口吧
1
package com.zyl.proxy;
2
3
public 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)接口類的實現
1
package com.zyl.proxy;
2
3
public 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)代理類
1
package com.zyl.proxy;
2
3
public 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
1
package com.zyl.ooxx;
2
3
import com.zyl.proxy.UserManager;
4
import com.zyl.proxy.UserManagerImpl;
5
import com.zyl.proxy.UserManagerImplProxy;
6
7
public 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
檢查安全性的方法
2
UserManagerImpl.addUser()
ok 靜態代理就這樣.