1.虚拟代理与状态模式相结合
State
package headfirst.proxy.virtualproxy;
import java.awt.Component;
import java.awt.Graphics;
public interface State {
public int getIconWidth();
public int getIconHeight();
public void paintIcon(final Component c, Graphics g, int x, int y);
}
ImageNotLoadedState
package headfirst.proxy.virtualproxy;
import java.awt.Component;
import java.awt.Graphics;
import java.net.URL;
import javax.swing.ImageIcon;
public class ImageNotLoadedState implements State {
private URL imageURL;
private ImageIcon imageIcon;
public ImageIcon getImageIcon() {
return imageIcon;
}
public void setImageIcon(ImageIcon imageIcon) {
this.imageIcon = imageIcon;
}
private boolean retrieving = false;
private Thread retrievalThread;
private ImageProxyWithState imageProxy;
public ImageNotLoadedState(ImageProxyWithState imageProxy, URL url) {
this.imageProxy = imageProxy;
this.imageURL = url;
}
public int getIconWidth() {
return 800;
}
public int getIconHeight() {
return 600;
}
public void paintIcon(final Component c, Graphics g, int x, int y) {
g.drawString("Loading CD cover, please wait...", x+300, y+190);
if (!retrieving) {
retrieving = true;
retrievalThread = new Thread(new Runnable() {
public void run() {
try {
imageIcon = new ImageIcon(imageURL, "CD Cover");
imageProxy.setCurrentState(imageProxy.getImageLoadedState());
((ImageLoadedState)imageProxy.getImageLoadedState()).setImageIcon(
((ImageNotLoadedState)imageProxy.getImageNotLoadedState()).getImageIcon());
c.repaint();
} catch (Exception e) {
e.printStackTrace();
}
}
});
retrievalThread.start();
}
}
}
ImageLoadedState
package headfirst.proxy.virtualproxy;
import java.awt.Component;
import java.awt.Graphics;
import javax.swing.ImageIcon;
public class ImageLoadedState implements State {
private ImageIcon imageIcon;
public ImageIcon getImageIcon() {
return imageIcon;
}
public void setImageIcon(ImageIcon imageIcon) {
this.imageIcon = imageIcon;
}
public int getIconWidth() {
return imageIcon.getIconWidth();
}
public int getIconHeight() {
return imageIcon.getIconHeight();
}
public void paintIcon(Component c, Graphics g, int x, int y) {
imageIcon.paintIcon(c, g, x, y);
}
}
ImageProxyWithState
package headfirst.proxy.virtualproxy;
import java.awt.Component;
import java.awt.Graphics;
import java.net.URL;
import javax.swing.Icon;
class ImageProxyWithState implements Icon {
State currentState;
State imageNotLoadedState;
State imageLoadedState;
public ImageProxyWithState(URL url) {
imageNotLoadedState = new ImageNotLoadedState(this, url);
imageLoadedState = new ImageLoadedState();
currentState = imageNotLoadedState;
}
public State getCurrentState() {
return currentState;
}
public void setCurrentState(State currentState) {
this.currentState = currentState;
}
public State getImageNotLoadedState() {
return imageNotLoadedState;
}
public void setImageNotLoadedState(State imageNotLoadedState) {
this.imageNotLoadedState = imageNotLoadedState;
}
public State getImageLoadedState() {
return imageLoadedState;
}
public void setImageLoadedState(State imageLoadedState) {
this.imageLoadedState = imageLoadedState;
}
public int getIconWidth() {
return currentState.getIconWidth();
}
public int getIconHeight() {
return currentState.getIconHeight();
}
public void paintIcon(final Component c, Graphics g, int x, int y) {
currentState.paintIcon(c, g, x, y);
}
}
2.Java动态代理实现机制及扩展
http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/
http://www.ibm.com/developerworks/cn/java/j-lo-proxy2/
分享到:
相关推荐
赠送jar包:hadoop-yarn-server-web-proxy-2.6.0.jar; 赠送原API文档:hadoop-yarn-server-web-proxy-2.6.0-javadoc.jar; 赠送源代码:hadoop-yarn-server-web-proxy-2.6.0-sources.jar; 赠送Maven依赖信息文件:...
开源项目-mtojek-aws-lambda-go-proxy.zip,mtojek/aws-lambda-go-proxy: Pass Lambda events to the application running on your machine | Debug real traffic locally | Forget about redeployments
让Node.js代理变得很简单,可轻松配置代理中间件,用于连接,快速,浏览器同步等等。
设计模式C++学习之代理模式(Proxy)
Koa中间件将请求代理到另一台主机,并将响应传回。 基于 。 安装 $ npm install koa-better-http-proxy --save 用法 proxy ( host , options ) ; 要将URLS代理到主机“ ”,请执行以下操作: var proxy = require...
django-rest-framework-proxy, Django Rest框架代理视图 Django Rest框架代理 提供将传入请求重定向到其他API服务器的视图。功能:伪装路径HTTP基本认证( 在API和后端API之间)令牌认证支持的方法:GET/POST/PUT/...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
docker-letsencrypt-nginx-proxy-companion-examples, 结合 Docker gen和 letsencrypt Nginx 代理伙伴的示例 docker-letsencrypt-nginx-proxy-companion-examples这个库是使用 nginx代理插件, docker gen和 docker-...
apache-shardingsphere-4.1.1-sharding-proxy
koa-server-http-proxy koa2 http-proxy-middleware。安装$ npm install koa-server-http-proxy --save例const Koa = require ( 'koa' )const app = new Koa ( )const proxy = require ( 'koa-server-http-proxy' )...
前端开源库-grunt-connect-proxygrunt connect proxy,提供一个HTTP代理作为grunt connect的中间件。
gulp+borwser-sync+http-proxy-middleware,代理解决跨域
influx-proxy-2.5.7-linux-amd64.tar.gz
开源项目-go-httpproxy-httpproxy.zip,转到HTTP代理服务器库
Api-sp-rest-proxy.zip,本地前端开发工具链的sharepoint rest api代理ssp rest proxy-本地前端开发工具链的sharepoint rest api代理,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用...
本资料来源于吕震宇博客,欢迎访问 ...经过整理,方便大家阅读。内容包括: 设计模式(22)-Strategy Pattern 设计模式(21)-Template ...C#设计模式(2) - 设计原则(1) C#设计模式(1) - 面向对象基本概念复习
基于JAINsip的一个proxy源码,有对sip感兴趣的朋友,可以下载,作为sip的一个代理服务器,实现sip消息的接收和发送。
节点获取代理 可以在代理后面使用的薄包装。 安装 npm install node-fetch-with-proxy 用法 API与node-fetch相同。 const fetch = require ( 'node-fetch-with-proxy' ) ; fetch ( 'http://httpbin.org/get' ) . ...
MySQL数据库分表批量主键查询代理-mysql-partitions-proxy
php-cross-domain-proxy, 跨域请求的PHP代理 PHP CORS代理 以前称为"php跨域( AJAX ) 代理PHP CORS代理是一个简单的PHP脚本,允许跨域请求。 它可以以用来访问第三方网站的资源当不能在目标网站 换句话说,上启用...