本来已经转贴了.想一想,自己还是再做个笔记吧.印象更深. 好 .....那么 继续
在写好的类中.添加新的功能.一般是怎么做的呢?
1.静态代理
参考代码static-proxy
1)首先写个接口吧
1
package com.zyl.proxy;
2![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
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)接口类的实现![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
2
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
3
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
5
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
6
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
7
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
8
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
9
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
10
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
11
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif)
1
package com.zyl.proxy;
2![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
3
public class UserManagerImpl implements UserManager {
4![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
5![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
6
public void addUer(String name, String password) {
7
//
添加日志/安全性检查
8
//checksafe();
9
//采用添加代理类的方法会如何?
10
System.out.println("UserManagerImpl.addUser()");
11![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
12
}
13![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
14
@Override
15
public void delUser(String id) {
16
//
添加日志/安全性检查
17
//checksafe();
18
System.out.println("UserManagerImpl.delUser()");
19
}
20![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
21
@Override
22
public void modifyUser(int id, String name, String password) {
23
//
添加日志/安全性检查
24
//checksafe();
25
System.out.println("UserManagerImpl.modifyUser()");
26![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
27
}
28
// private void checksafe(){
29
// System.out.println("检查安全性的方法");
30
// }
31
}
比如添加checksafe()方法. 要在每个实现方法中调用checksafe(); (把代码中注释去掉后的效果)![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
2
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
3
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
5
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
6
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif)
7
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/dot.gif)
8
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
9
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
10
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
11
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
12
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
14
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
15
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/dot.gif)
17
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
18
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
19
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif)
20
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
21
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
22
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/dot.gif)
24
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
25
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
26
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
27
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
29
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
30
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
31
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif)
这样做,有人会不满.不希望在实现类中出现其他7788的东西.
那么注释就别去了...加个代理吧.
3)代理类
1
package com.zyl.proxy;
2![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
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![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
14
}
15![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
16![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
17
public void delUser(String id) {
18
checksafe();
19
usermanager.delUser(id);
20
}
21![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
22![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
23
public void modifyUser(int id, String name, String password) {
24
checksafe();
25
usermanager.modifyUser(id, name, password);
26![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
27
}
28
private void checksafe(){
29
System.out.println("检查安全性的方法");
30
}
31
//代理类的效果: 没有改变真实的实现,添加了需要的功能.可是在代理类中,代码里充斥着checksafe()这样的无关代码
32
//静态代理不适用大量类需要添加功能的项目
33
}
34![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
//代理类的效果: 没有改变真实的实现,添加了需要的功能.可是在代理类中,代码里充斥着checksafe()这样的无关代码;![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
2
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
3
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif)
4
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
5
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
6
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif)
7
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
8
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif)
9
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
11
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
12
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
13
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
14
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif)
15
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
16
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
17
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif)
18
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
19
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
20
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
22
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
23
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif)
24
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
25
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
26
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
27
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif)
28
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif)
29
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
30
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif)
31
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
32
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
33
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif)
34
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
//静态代理不适用大量类需要添加功能的项目;
// 第3行: 可以看到,代理类UserManagerImplProxy也是实现接口UserManager;
// 第6行:定义构造方法,传入UserManager类型的实例.实现接口的方法(addUser等);
// 在方法中加入安全检查新的方法checksafe()或者日志等7788的方法.
其实大同小异,在代理类中的方法,照样还是要加入添加的方法checksafe();
4)实现client
1
package com.zyl.ooxx;
2![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
3
import com.zyl.proxy.UserManager;
4
import com.zyl.proxy.UserManagerImpl;
5
import com.zyl.proxy.UserManagerImplProxy;
6![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
7
public class client {
8![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
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![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
18
}
19![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
打印结果如下:![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
2
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
3
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
4
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
5
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
6
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
7
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif)
8
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
9
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
11
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
12
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
13
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
14
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
15
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
16
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif)
17
![](http://www.blogjava.net/images/OutliningIndicators/InBlock.gif)
18
![](http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif)
19
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
1
检查安全性的方法
2
UserManagerImpl.addUser()
ok 静态代理就这样.![](http://www.blogjava.net/images/OutliningIndicators/None.gif)
2
![](http://www.blogjava.net/images/OutliningIndicators/None.gif)