java 静态代理的主要特征就是,代理类和委托类要实现同样的接口。在调用接口方法的时候,对外提供一个实例工厂对象。
静态代理类优缺点
代理类和委托类具有相同的接口,但是委托类才是直正的接口实现者,代理类只是 调用 委托类的相关方法来提供特定的服务,
优点:业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。
缺点:
1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。
2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
1 /* 2 * 代理类和委托类具有相同的接口,但是委托类才是直正的接口实现者,代理类只是 调用 委托类的相关方法来提供特定的服务, 3 * 代理类可以为委托类预处理信息,把信息传递给委托类处理并进行事后处理。 4 * 5 */ 6 public interface ImplBook { 7 public void borrow(User user); 8 public void returnBook(User user); 9 }
1 public class Library implements ImplBook{ 2 3 @Override 4 public void borrow(User user) { 5 System.out.println(user.getUname()+"从图书馆借书"); 6 7 } 8 9 @Override 10 public void returnBook(User user) { 11 System.out.println(user.getUname()+"还书"); 12 13 } 14 15 }
1 public class LibraryManager implements ImplBook{ 2 private Library library = new Library(); 3 @Override 4 public void borrow(User user) { 5 System.out.println("图书管理员同意借书前……"+user.getUname()+"登记"); 6 library.borrow(user); 7 System.out.println("图书管理员同意借书后……"+user.getUname()+"离开"); 8 } 9 @Override 10 public void returnBook(User user) { 11 System.out.println(user.getUname()+"还书前登记 "); 12 library.returnBook(user); 13 System.out.println(user.getUname()+"还书后离开"); 14 }
1 public class Client { 2 public static void main(String[] args) { 3 User user = new User(); 4 user.setUname("xiaoMing"); 5 user.setId("I08002726"); 6 7 LibraryManager libraryManager = new LibraryManager(); 8 libraryManager.borrow(user); 9 libraryManager.returnBook(user); 10 } 11 }