当前所在位置:珠峰网资料 >> 计算机 >> 软件水平 >> 正文
计算机初级软考:Java设计模式之代理模式篇
发布时间:2009/11/22 13:20:02 来源:城市学习网 编辑:admin
  在软件工程中,代理模式(Proxy Pattern)在很多情况下都非常有用。例如在Java XML保重,开发人员可以利用代理来访问Web服务。例1中演示了经典的Hello       World Web服务的例子:
  例1 一个SOAP代理的例子
  public class HelloClient {
  public static void main(String[] args) {
  try {
  HelloIF_Stub proxy = (HelloIF_Stub)(new HelloWorldImpl().getHelloIF());
  proxy._setTargetEndpoint(args[0]);
  System.out.println(proxy.sayHello("Hello World!"));
  } catch (Exception ex) {
  ex.printStackTrace();
  }
  }
  }
  在例一中,客户端首先获得对代理的引用,然后利用命令行参数设定代理的端点(即Web服务的URL地址),接下来调用代理的sayHello()方法,代理再将方法调用传递给相应的Web服务。
  代理模式和修饰模式(Decorator Pattern)有一定的相似之处。两个模式又使用了代理将方法调用传递给另一个对象,该对象被称为真实对象(Real Subject)。代理模式和修饰模式的不同之处在于:在代理模式中,代理和真实对象之间的关系在程序被编译的时候就确定下来了,而修饰模式则是在运行时递归地创建。
  本文首先提供一个ImageIcon的例子来说明代理模式,然后会探讨一下JDK是如何支持代理模式的。
  代理模式
  代理模式通过使用代理来替代实际的对象,使程序能够控制对该对象的访问。下面是一个ImageIcon的例子。
  例2 ImageIcon的例子
  import java.awt.*;
  import java.awt.event.*;
  import javax.swing.*;
  public class IconTest extends JFrame {
  private static String IMAGE_NAME = "hands.jpg";
  private static int FRAME_X = 150, FRAME_Y = 200,
  FRAME_WIDTH = 430, FRAME_HEIGHT = 392;
  private Icon imageIcon = null, imageIconProxy = null;
  static public void main(String args[]) {
  IconTest app = new IconTest();
  app.show();
  }
  public IconTest() {
  super("ImageIcon测试");
  imageIcon = new ImageIcon(IMAGE_NAME);
  setBounds(FRAME_X, FRAME_Y, FRAME_WIDTH, FRAME_HEIGHT);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
  public void paint(Graphics g) {
  super.paint(g);
  Insets insets = getInsets();
  imageIcon.paintIcon(this, g, insets.left, insets.top);
  }
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15080520号-20
珠峰网 版权所有 All Rights Reserved