总觉得设计模式名字起的很好,形象地就代表它的功能。
正如代理模式,它是使用一个类代表另一个类的功能,属于结构型设计模式。
通过创建对象的对象,来提供访问功能的接口。
应用举例:快捷方式、代售点等。
设计:
- 一个接口,两个分别实现类,一个是功能类,一个是代理类,代理类里有功能类对象的数据成员
代码:
interface Image{
void display();
}
class RealImage implements Image{
private String fileName;
private void loadFromDisk(String fileName){
System.out.println("Loading"+fileName);
}
public RealImage(String fileName){
this.fileName=fileName;
loadFromDisk(fileName);
}
public void display() {
System.out.println("Displaying:"+fileName);
}
}
class ProxyImage implements Image{
private RealImage realImage;
private String fileName;
public ProxyImage(String fileName) {
this.fileName = fileName;
}
public void display() {
if(realImage==null){
realImage=new RealImage(fileName);
}
realImage.display();
}
}
public class ProxyPatternDemo {
public static void main(String[] args) {
Image image=new ProxyImage("dog.jpg");
image.display();
System.out.println("");
//因为realImage已经被初始化了
image.display();
}
}
输出:
Loadingdog.jpg
Displaying:dog.jpg
Displaying:dog.jpg
总结:
- 优点:职责清晰、高拓展性
- 缺点:代理模式可能会复杂化
- 和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
- 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。