本来已经转贴了.想一想,自己还是再做个笔记吧.印象更深. 好 .....那么 继续
在写好的类中.添加新的功能.一般是怎么做的呢?
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 静态代理就这样.