一. 代理模式
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'
相关推荐
实现对象的复用——享元模式(二) 实现对象的复用——享元模式(三) 实现对象的复用——享元模式(四) 实现对象的复用——享元模式(五) 代理模式-Proxy Pattern 设计模式之代理模式(一) 设计模式之代理模式...
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
代理模式(Proxy Pattern) 3 行为型模式 这些设计模式特别关注对象之间的通信。 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式...
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 Pattern) 3. 行为型模式 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式...
代理模式(Proxy Pattern)是 23 种设计模式的一种,属于结构型模式。他指的是一个对象本身不做实际的操作,而是通过其他对象来得到自己想要的结果。这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,...
结构设计模式 -- Adapter -- Bridge -- Composite -- Decorator - Done -- Facade -- Flyweight -- Private Class Data -- Proxy 行为设计模式 -- Chain of Responsibility -- Command -- Interpreter -- Iterator...
2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器...
在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern 1.1 创建型模式 ...
代理模式【PROXY PATTERN】 单例模式【SINGLETON PATTERN】 多例模式【MULTITION PATTERN】 工厂方法模式【FACTORY METHOD PATTERN】 抽象工厂模式【ABSTRACT FACTORY PATTERN】 门面模式【FACADE ...
获取到【文件夹】名称: proxy_pattern 获取到【文件夹】名称: simple_factory_pattern 获取到【文件夹】名称: single_pattern 获取到【文件夹】名称: status_pattern 获取到【文件夹】名称: strategy_...
附件中是java实现全部的设计模式,包含代码和工程(jbuilder工程),值得收藏. 此目录里包括了一书中所有23种设计模式的实现(Java 版)源码 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写...
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/structure/...
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 代理模式 java demo
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/structure/...
代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个...
家庭作业的主题: HW01: PART1->策略设计模式PART2->观察者设计模式PART3->装饰器设计模式HW02: PART1->单例设计模式PART2->迭代器设计模式PART3->状态和观察者模式PART4->代理设计模式中期: PART1->抽象工厂...
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/...
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/...
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/structure/...