标签:
java 静态代理的主要特征就是,代理类和委托类要实现同样的接口。在调用接口方法的时候,对外提供一个实例工厂对象。
静态代理类优缺点
优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。
缺点:
1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。
2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
1 public interface ImplUserDao { 2 public void add();//定义 添加接口 3 public void delete();//定义删除接口 4 }
1 public class UserDaoImpl implements ImplUserDao{ 2 3 /* (non-Javadoc) 4 * @see cn.org.fupin.ImplUserDao#add() 5 */ 6 public void add() { 7 // TODO Auto-generated method stub 8 System.out.println("UserDaoImpl.add()"); 9 } 10 11 /* (non-Javadoc) 12 * @see cn.org.fupin.ImplUserDao#delete() 13 */ 14 public void delete() { 15 // TODO Auto-generated method stub 16 System.out.println("UserDaoImpl.delete()"); 17 } 18 19 20 }
1 public class UserDaoProxy implements ImplUserDao{ 2 3 private ImplUserDao implUserDao; 4 5 public UserDaoProxy(ImplUserDao implUserDao) { 6 7 this.implUserDao = implUserDao; 8 } 9 10 public void add() { 11 // TODO Auto-generated method stub 12 implUserDao.add(); 13 } 14 15 /* (non-Javadoc) 16 * @see cn.org.fupin.ImplUserDao#delete() 17 */ 18 public void delete() { 19 // TODO Auto-generated method stub 20 implUserDao.delete(); 21 } 22 23 }
1 public class UserDaoFactory { 2 3 4 public static ImplUserDao getUserInstance(){ 5 return new UserDaoProxy(new UserDaoImpl()); 6 } 7 8 }
1 public class Client { 2 public static void main(String[] args) { 3 ImplUserDao implUserDao = UserDaoFactory.getUserInstance(); 4 implUserDao.add(); 5 implUserDao.delete(); 6 } 7 }
标签:
原文地址:http://www.cnblogs.com/shuanlei/p/4253543.html