当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 对象去耦(Object decoupling) 代理(Proxy)模式和状态(State)模式分别提供了供你使用的代理类(surrogate class);正真干活的那个类被代理类隐藏了。
 

 

 ·springframework(9)     »显示摘要«
    摘要:6、orm (1)orm l orm:对象关系映射(object-relational mapping) l 内建支持: Ø jdo Ø ibatis Ø hibernate (2)hibernate配置 l 定义datasource和hibernate sessionfactory <bean id="datasource"......
    摘要:欢迎使用bqyahoo! 随着google推出1g邮箱,邮箱的容量不可逆转的变得越来越大。有时候我常想,既然在网络上存在着这么大一个自己可以利用的空间,如果仅仅只是接收信件,似乎没有物尽其用。或许可以将大容量的电子邮箱当作网络硬盘使用。 目前可以比较轻松申请到的大容量电子邮箱就是雅虎的1g邮箱。我有很多朋友一口气申请了五六个。不过,他们也觉得很难利用好这数g的空间,除了疯狂给自己发邮件。 我......


翻译TIPatterns--对象去耦(Object decoupling)

对象去耦(object decoupling)

    代理(proxy)模式与状态(state)模式分别提供了供你使用的代理类(surrogate class);正真干活的那个类被代理类隐藏了.当你调用代理类的一个方法的时候,代理类只是简单的调用实现类(implementing class)所对应的方法.这两种模式非常相似,实际上,代理(proxy)模式只是状态(state)模式的一个特例. 【程序编程相关:介绍J2ME中的通用联网框架

  【推荐阅读:使用java.text包格式化数字和日期

    这两种模式的基本概念非常简单:代理类 (surrogate) 与 实现类都由同一个基类派生出来: 【扩展信息:[原创]将OLE StdFont字体结构

    有人试图将这两种模式合在一起统称为surrogate模式,但是“代理(proxy)”这个术语已经用了很长时间了,而且它有自己特殊的含义,它的这些含义基本上体现了这两种模式的差别所在.

 

 

    当创建一个代理对象 (surrogate object) 时,同时会创建一个实现(对象),代理对象会把所有的方法调用传递给实现对象.

    从结构上看,代理(proxy)模式与状态(state)模式之间的差别非常简单:一个代理(proxy)只对应一个实现(implementation),而一个状态(state)却可以对应多个实现.«设计模式»一书认为,这两种两种模式的应用场合是截然不同的:代理(proxy)模式用于控制对实现(类)的访问,而状态(state)模式可以动态地改变实现(类).但是,如果把“控制对实现类的访问”这个概念扩展开来的话,这两种模式就可以优雅的结合在一起了.

 

代理:替另外一个对象打点一切(proxy: fronting for another object)

    我们按照上面的图示实现代理(proxy)模式,下面是实现代码:

 

//: proxy:proxydemo.java

// simple demonstration of the proxy pattern.

package proxy;

import junit.framework.*;

 

interface proxybase {

 void f();

 void g();

 void h();

}

 

class proxy implements proxybase {

 private proxybase implementation;

 public proxy() {

  implementation = new implementation();

 }

 // pass method calls to the implementation:

 public void f() { implementation.f(); }

 public void g() { implementation.g(); }

 public void h() { implementation.h(); }

}

 

class implementation implements proxybase {

 public void f() {

  system.out.println("implementation.f()");

 }

 public void g() {

  system.out.println("implementation.g()");

 }

 public void h() {

  system.out.println("implementation.h()");

 }

}

 

public class proxydemo extends testcase  {

 proxy p = new proxy();

 public void test() {

  // this just makes sure it will complete

  // without throwing an exception.

  p.f();

  p.g();

  p.h();

 }

 public static void main(string args[]) {

  junit.textui.testrunner.run(proxydemo.class);

 }

} ///:~

    当然,并不是说实现类与代理类必须实现完全相同的接口;既然代理类只是在一定程度上代表那个需要它提交(referring)方法的类,这就已经满足了proxy模式的基本要求(注意这里的陈述与gof一书所给出的定义是有差别的).
...   下一页

    摘要:欢迎下载bqyahoo测试版! bqyahoo测试版: http://biqiong.fangwen.cn/8/biqiong/download/bqyahoo.rar 一个例子: 下面是我的雅虎邮箱的登陆码(登陆码由大写的字母和数字组成,不包括任何换行、回车和空格等,一共有160位): 934ba8440cf7003dc9a560e8710f902a2......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE