`

java设计模式--[结构模式]--代理模式[proxy pattern]

阅读更多

一. 代理模式

      Provide a surrogate or placeholder for another object to control access to it. 這是'四人幫'的書中對代理的高度概括. 代理模式,其實是為其他對象找供一種代理以控制對這個對象的訪問. 如:程序的快捷方式,老板的秘書等等,都是實現代理的功能.

 

 二. 代理模式所涉及的角色:

 1.抽象主题角色:声明了真实主题与代理主题的共同接口(共有的特性)
 2.代理主题角色:含有对真实主题角色的引用(操作真实主体对象),代理角色通常在将客户端调用传递给真实主题对象的之前或者之后都会执行某些操作(方法),而不是只单纯的返回真实的对象。
 3.真实主题角色:定义了代理角色所代表的真实对象。    

 

三. 遠程代理的UML類圖如下:

 

四. 完整示例代碼如下:

 

1. 遠程接口[服務器端]

package structuralPattern.proxy.rmi.proxy1;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
 * @ClassName: MyRemote 
 * @Description:遠程接口[服務器端]
 * @author Liyongbin
 * @date 2011-2-8 上午08:05:06 
 * @version V1.0
 */
public interface MyRemote extends Remote {
	//返回值對象(String),經過網絡,必須是Serializable類型 
	public String sayHello()throws RemoteException;
}

2. 遠程服務[服務器端]

package structuralPattern.proxy.rmi.proxy1;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
/**
 * @ClassName: MyRemoteImpl 
 * @Description:遠程服務[服務器端]
 * @author Liyongbin
 * @date 2011-2-8 上午08:29:35 
 * @version V1.0
 */
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote {
	private static final long serialVersionUID = 3889961927313297841L;
	//端口號
	public static final int DEF_PORT = 1099;
	//無參構造器
	protected MyRemoteImpl() throws RemoteException {}

	//遠程方法
	@Override
	public String sayHello() throws RemoteException {
		return "Server says:'Hey'";
	}
	
	/**
	 * 用RMI Registry註冊此服務
	 * @param args
	 */
	public static void main(String[] args) {
		 int port = DEF_PORT;
		 //可以註冊在起動時(命令行)輸入的端口號
		 try {
			 if (args.length > 0) {
			        port = Integer.parseInt(args[0]);
			 }
			MyRemote Service = new MyRemoteImpl();
			//注冊一個端口號
			LocateRegistry.createRegistry(port);
			//綁定服務//host:port/servername
			String url = "//:" + port + "/RemoteHello";
			Naming.rebind(url, Service); 
			//Naming.rebind("rmi://:"+ port +"/RemoteHello", Service); 
			System.out.println("Server is run!");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

3.:[客戶端]

package structuralPattern.proxy.rmi.proxy1;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

/**
 * @ClassName: MyRemoteClient
 * @Description:[客戶端]
 * @author Liyongbin
 * @date 2011-2-8 上午08:34:41
 * @version V1.0
 */
public class MyRemoteClient {
	private static final int DEF_PORT = 1099;
	private static final String DEF_IP = "127.0.0.1";

	public static void main(String[] args) {
		new MyRemoteClient().go();
	}

	public void go() {
		try {
			// 用來指出服務運行位置的主機名和IP地址,注:RemoteHello必須是註冊時用的名字.
			String url = "rmi://" + DEF_IP + ":" + DEF_PORT + "/RemoteHello";
			MyRemote Service = (MyRemote) Naming.lookup(url);
			String str = Service.sayHello();
			System.out.println("Clent:"+str);

		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
	}
}

 

4.  先運行:  2. 遠程服務[服務器端]

     結果:  Server is run!

     再運行:  3. [客戶端]

     結果: Clent:Server says,'Hey'

  • 大小: 10.9 KB
分享到:
评论

相关推荐

    java设计模式---诙谐易懂版

    例如,代理模式(Proxy Pattern)、单例模式(Singleton Pattern)、工厂方法模式(Factory Method Pattern)、抽象工厂模式(Abstract Factory Pattern)、适配器模式(Adapter Pattern)、模板方法模式(Template ...

    JAVA设计模式-chm版

    Java设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时程序员们经常采用的有效方法。这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的...

    JAVA design pattern-java设计模式

    总结来说,"JAVA design pattern-java设计模式"的CHM文件是深入学习和理解Java设计模式的宝贵资源,通过学习和应用这些模式,开发者可以提高其代码质量,优化系统架构,从而更好地应对复杂的软件开发挑战。

    java常用设计模式-代理模式

    代理模式(Proxy Pattern)是一种常用的设计模式,提供了间接访问目标对象的一种方式,即通过代理对象访问目标对象。这样做的好处是,可以在不改变原有目标对象的基础上,对目标对象增加额外的扩展功能。 代理模式...

    design-pattern-java.pdf

    实现对象的复用——享元模式(二) 实现对象的复用——享元模式(三) 实现对象的复用——享元模式(四) 实现对象的复用——享元模式(五) 代理模式-Proxy Pattern 设计模式之代理模式(一) 设计模式之代理模式...

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    在这些模式中,代理模式(Proxy Pattern)是一种常用的结构型设计模式,它允许我们为一个对象创建一个代理,该代理对象在客户端和目标对象之间起到中介的作用,可以增加额外的功能或控制访问。 代理模式分为两种...

    java-design-patterns-master_JAVAdesignpattens_java_design_

    8. **代理模式(Proxy Pattern)**:为其他对象提供一种代理以控制对这个对象的访问,比如远程代理、虚拟代理、缓存代理等。 9. **桥接模式(Bridge Pattern)**:将抽象部分与它的实现部分分离,使它们都可以独立...

    设计模式课程设计---使用5个以上不同的设计模式完成(java)

    4. **代理模式(Proxy Pattern)**:代理模式为其他对象提供一种代理以控制对这个对象的访问。在Java中,我们可以使用动态代理(`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`)或者静态代理...

    design-pattern-Java设计模式

    在Java设计模式中,主要分为三大类:创建型模式、结构型模式和行为型模式。创建型模式如单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype),...

    Java设计模式(第二版)中文版

    - **代理模式**(Proxy Pattern) - **行为型模式**:关注于算法与对象之间的分配,以及它们之间的通信机制。 - **策略模式**(Strategy Pattern) - **模板方法模式**(Template Method Pattern) - **观察者...

    java设计模式ppt

    代理模式 (Proxy Pattern) 代理模式是一种结构型模式,为其他对象提供一个代理以控制对该对象的访问。代理模式主要用于添加额外的功能,如权限检查、性能优化等,而不会影响原始对象的实现。 #### 7. 原型模式 ...

    这是一套 Java 设计模式的集合示例-design-pattern.zip

    Java设计模式是软件工程中的一种最佳实践,它们是解决常见编程问题的经验总结,可以提高代码的可重用性、可维护性和可扩展性。在"design-pattern.zip"这个压缩包中,我们很可能会找到一系列与Java设计模式相关的代码...

    设计模式java源码-design-pattern:java设计模式源代码

    2. 结构型模式:这类模式关注类和对象的组合,如适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。...

    设计模式整理代码-pattern.zip

    - 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 - 外观模式(Facade):为子系统提供一个统一的接口,使得子系统的复杂性对客户透明。 - 适配器模式(Adapter):使两个不兼容的接口能够...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    Java高手真经 - Java Web系统设计与架构 源代码(一)设计模式

    pattern/src/structure/proxy //12.3代理模式 pattern/src/structure/facade //12.4外观模式 pattern/src/structure/bridge //12.5桥接模式 pattern/src/structure/composite //12.6组合模式 pattern/src/...

    设计模式之代理模式proxy

    **设计模式之代理模式(Proxy Pattern)** 设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的模板。代理模式是其中一种行为设计模式,它的核心思想是为一个对象提供一个替身或者代理,以控制对...

    Android设计模式之代理模式(Proxy Pattern)

    代理模式是设计模式的一种,它的主要目的是在不改变原有对象的基础上,为一个对象提供额外的功能或者控制对这个对象的访问。在Android开发中,代理模式的应用尤为常见,尤其在处理复杂的业务逻辑、网络请求、界面...

    JAVA 23种设计模式(全).Design Pattern_Java模式

    总结来说,"JAVA 23种设计模式(全).Design Pattern_Java模式"这份资源是学习和掌握Java设计模式的重要工具。通过深入学习并熟练应用这些模式,开发者可以写出更高效、更易于维护的代码,同时提升个人的编程技能和...

Global site tag (gtag.js) - Google Analytics