应用场合举例:
代理服务器
缩略图一览显示和实际图片单张显示
授权机制
package com.javaeye.kang.proxy;
// 图 片代理, 显 示 缩 略 图 片 // 代理 类 class ImageProxy { private ImageDisplay imageDisplay ; public ImageProxy(ImageDisplay imageDisplay) { this . imageDisplay = imageDisplay; } public void displayBreviaryImage() { System. out .println( " 显 示 缩 略 图 片 " ); } // 响 应 鼠 标 点 击缩 略 图 的操作, 显 示 实际图 片 public void pressMouse() { imageDisplay .displayFactImage(); } }
// 实际 工作 类 class ImageDisplay { //" 显 示 实际图 片 " 这 个操作很耗 资 源 public void displayFactImage() { System. out .println( " 显 示 实际图 片 " ); } }
// 客 户 端 public class ProxyTest { public static void main(String[] args) { // 可以将 ImageDisplay 对 象注入(使用 spring ) ImageProxy imageProxy = new ImageProxy( new ImageDisplay()); // 客 户 端 调 用 时 只是感 觉 和代理 类 打交道 imageProxy.displayBreviaryImage(); // 显 示 缩 略 图 片 imageProxy.pressMouse(); // 鼠 标 点 击 , 显 示 实际图 片 } } |
测试结果:
显 示 缩 略 图 片 显 示 实际图 片 |
改进,面向接口编程
/* * 代理模式 * 改 进 :面向接口 编 程 */ // 图 片代理 类 , 显 示 缩 略 图 片 class ImageProxy { private IImageDisplay iImageDisplay ; public ImageProxy(IImageDisplay iImageDisplay) { this . iImageDisplay = iImageDisplay; }
public void displayBreviaryImage() { System. out .println( " 显 示 缩 略 图 片 " ); } // 响 应 鼠 标 点 击缩 略 图 的操作, 显 示 实际图 片 public void pressMouse() { iImageDisplay .displayFactImage(); } }
// 面向接口 编 程 interface IImageDisplay { public abstract void displayFactImage(); }
// 实际 工作 类 class ImageDisplay implements IImageDisplay { //" 显 示 实际图 片 " 这 个操作很耗 资 源 public void displayFactImage() { System. out .println( " 显 示 实际图 片 " ); } }
// 客 户 端 public class ProxyTest { public static void main(String[] args) { // 可以将 ImageDisplay 对 象注入(使用 spring ) ImageProxy imageProxy = new ImageProxy( new ImageDisplay ()); // 客 户 端 调 用 时 只是感 觉 和代理 类 打交道 imageProxy.displayBreviaryImage(); // 显 示 缩 略 图 片 imageProxy.pressMouse(); // 鼠 标 点 击 , 显 示 实际图 片 } } |