代理模式定义如下:
其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式的三种角色:
抽象角色(一般采用抽象类或者接口)
真实角色(抽象角色的具体实现,具体实现)
代理角色(具体对外干活的)
场景概述如下:
图书包括图书名称和出版社,但是我们在获取这两个值的时候都会事先知道他的价格,当获取其两个属性之后我们会考虑是否阅读。
Java静态代理的实现:
抽象角色:
Java代码
public interface IBook {
String getBookName();
String getBookPress();
}
实现角色:
Java代码
public class JavaBook implements IBook {
@Override
public String getBookName() {
return "Java 程序设计";
}
@Override
public String getBookPress() {
return "上海科学出版社";
}
}
代理角色:
Java代码
public class ProxyBook implements IBook {
private IBook book = null;
public ProxyBook(IBook book) {
super();
this.book = book;
}
@Override
public String getBookName() {
System.out.println("获取图书价格成功");
String bookName = book.getBookName();
System.out.println("后续可以阅读");
return bookName;
}
@Override
public String getBookPress() {
System.out.println("获取图书价格成功");
String bookPress = book.getBookPress();
System.out.println("后续可以阅读");
return bookPress;
}
}
测试代码:
Java代码
public static void main(String[] args) {
IBook book = new ProxyBook(new JavaBook());
book.getBookName();
book.getBookPress();
}
发现问题:
Java代码
1.抽象角色的行为发生变化的时候就需要重新写代理类的实现了
网友评论