1. 分析程序中存在的问题(高内聚,低耦合)
通过springIOC DI) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的功能,造成了 无法“高内聚”的现象,同时存在大量存在重复代码,开发效率低下。
1 @Service 2 public class UserServiceImpl implements UserService { 3 @Autowired 4 private UserDao userDao; 5 6 @Override 7 public void registUser(User user) { 8 try { 9 System.out.println("校验权限。。。"); 10 System.out.println("开启事务。。。"); 11 System.out.println("记录日志。。。"); 12 userDao.addUser(user); 13 System.out.println("提交事务。。。"); 14 } catch (Exception e) { 15 System.out.println("回滚事务"); 16 e.printStackTrace(); 17 } 18 } 19 20 @Override 21 public void upToVIP(User user) { 22 try { 23 System.out.println("校验权限。。。"); 24 System.out.println("开启事务。。。"); 25 System.out.println("记录日志。。。"); 26 userDao.updateUser(user); 27 System.out.println("提交事务。。。"); 28 } catch (Exception e) { 29 System.out.println("回滚事务"); 30 e.printStackTrace(); 31 } 32 33 } 34 35 @Override 36 public void removeUser(User user) { 37 try { 38 System.out.println("校验权限。。。"); 39 System.out.println("开启事务。。。"); 40 System.out.println("记录日志。。。"); 41 userDao.deleteUser(user.getId()); 42 System.out.println("提交事务。。。"); 43 } catch (Exception e) { 44 System.out.println("回滚事务"); 45 e.printStackTrace(); 46 } 47 } 48 49 } 50 此时可以通过代理设计模式,将这部分代码提取到代理者中,简化层中的代码。 51 52 2. 静态代理模式 53 package cn.tedu.staticproxy; 54 public interface SJSkill { 55 public void 吃(); 56 public void 唱歌(); 57 } 58 59 package cn.tedu.staticproxy; 60 public class FBB implements SJSkill{ 61 public void 吃(){ 62 System.out.println("fbb吃饭。。。"); 63 } 64 public void 唱歌(){ 65 System.out.println("fbb唱歌。。。"); 66 } 67 } 68 69 package cn.tedu.staticproxy; 70 public class JJRStaticProxy implements SJSkill{ 71 72 private FBB fbb = new FBB(); 73 74 @Override 75 public void 吃() { 76 System.out.println("权限认证:你谁啊????"); 77 fbb.吃(); 78 System.out.println("记录日志:等我,我记一下来访记录"); 79 } 80 81 @Override 82 public void 唱歌() { 83 System.out.println("权限认证:你谁啊????"); 84 fbb.唱歌(); 85 System.out.println("记录日志:等我,我记一下来访记录"); 86 } 87 88 } 89 90 package cn.tedu.staticproxy; 91 import org.junit.Test; 92 public class StaticProxyTest { 93 @Test 94 public void test01(){ 95 JJRStaticProxy jjr = new JJRStaticProxy(); 96 jjr.吃(); 97 jjr.唱歌(); 98 } 99 }