1、概念说明:
代理模式,主要是针对一些核心业务,不方便直接提供服务,或者是某些业务较复杂所需要的功能不止是该业务可以提供支持的,需要通过代理类提供支撑,比较专业的人做专业的事情;这里可以举个例子,如小明想去买一本书,总不能直接去印刷社买吧,他只能去书店或者网购等渠道,这个时候书店或者网购就是代理书籍,这样做的好处是,印刷社专门去做印刷就好了,其他的不用管;
2、实战
/**
* 印刷社 、 书
*/
public class Book {
private StringbookName ="默认书名";
public void setBookName(String bookName) {
this.bookName = bookName;
}
public Book() {
printBook();
}
protected void printBook(){
bookName ="心若菩提";
System.out.println("打印制造书籍:"+bookName);
}
/**
* 对外提供卖书接口,提供给销售
* @return
*/
protected StringgetBook(){
return bookName;
}
}
public interface GoBookInterface {
/**
* 去书店买书
*/
public void toBookstoreBuyBook();
/**
* 去淘宝商城买书
*/
public void toTaobaoBuyBook();
}
public class ProxyGoBookInterfaceImplimplements GoBookInterface{
Bookbook =new Book();
@Override
public void toBookstoreBuyBook() {
System.out.println("在书店购买书籍:" +book.getBook());
}
@Override
public void toTaobaoBuyBook() {
System.out.println("在淘宝店购买书籍:" +book.getBook());
}
}
public class Actuatory {
public static void main(String[] args) {
GoBookInterface proxy =new ProxyGoBookInterfaceImpl();
proxy.toBookstoreBuyBook();
proxy.toTaobaoBuyBook();
}
}
3、思考
这里的举例是其实是静态代理模式来实现的,还有动态代理的概念,动态代理本质上是通过反射来决定接口实现类,也就是程序运行时才确定代理类,这样做的好处是非常灵活,可以根据不同场景来决定代理的业务;除了业务还有技术底层也用了代理模式,如spring aop的动态代理实现方式就有jdk动态代理(通过接口实现类实现)、cglib动态代理(通过类的方法实现,因为通过字节符实现,比jdk效率高)