`

【设计模式】代理模式

 
阅读更多

定义:

      代理模式(Proxy Pattern)是对某个对象提供一种名为代理的方式以控制其他对象对这个对象的访问的设计方法。

主要作用:

      为其他对象提供一种代理以控制对这个对象的访问。特别地,一个对象不想或者不能直接引用另一个对象,比如一个对象处于客户端,而另一个对象处于服务器,两者进行少量的调用时还好,若两者间调用过多或复杂时,代理模式就可以减少资源浪费,提高效率,作用重大。代理对象在这两个对象间就是中介的作用。

  

 

      所谓“代理模式”就是在双方间增加一个代理对象,以更好地解决需要不同方法或修改方法的需求,是符合OOP的基本设计原则的常用模式。

      例如:假设有一组对象都实现同一个接口,实现同样的方法,但随着需求的变化,这组对象中有一部分对象需要增加一些特有的方法或功能,有两种方法:

1、每一个需要特殊方法的地方都加上这个方法,但是显然这样不科学,很浪费,代码的重用性低,耦合性高。

2、利用代理方式,在代理对象中创建该方法,就可以漂亮地解决了。

生活中的例子

      比如那些明星,明星要和很多人接触,有导演、主持人、厂商、其他明星、唱片公司、形象设计师……这些人都要和明星见面,但见面后说的事不同,方式也有可能不同,但他们都要做同一件时就说约见面的时间和地点。明星自己显然是忙不过吧,而且明星身处位置也有可能和要见面的人相距很远。ok,代理模式帮你解决,于是就有了经纪人。明星就是一个对象,那些有需要和她见面的人就是其他的对象,而经纪人就是代理对象,代理对象代替明星和其他对象交流沟通,安排细节事情,这样明星就可以一心一意地做事。

 我的例子如下:

以上面的生活中的例子来讲:

 

 /*假设有一个Star接口,有空的方法maketime()(邀约),
所有的people对象都实现(implements)这个接口,实现maketime()
方法,将people实例化成为一个个人,执行maketime方法,而这些人与明
星还要约见面地点,那么我们既不能在Star接口里增加makeplace()方法,
而每个people中增加makeplace方法又不科学,我们只有增加一个代理类makeProxy,这个代理类里实现maketime和makeplace方法,然后在需
要makeplace方法的地方调用makeProxy即可。*/

  

public class Test { 

  /**代理模式

   */ 

  public static void main(String[] args) { 
  People people1=new People("张艺谋"); 
  people1.maketime("Star"); 
    System.out.println("-----------------------------"); 
  makeProxy maketimer=new makeProxy (people1); 
  maketimer.maketime("Star","街角咖啡屋"); 
  } 
  }
public interface Star{ 
  public void maketime(String msg); 
  } 
 public class People implements Star{ 
  public String name;   
  public String getName() { 
  return name; 
  } 
  public void setName(String name) { 
  this.name= name; 
  }   
  public People(String name1) {  
  this.name= name1; 
  } 
  public void maketime(String msg) { 
  System.out.println(msg+"!你好,我是"+name+",我想约在:9点"); 
  } 
  } 
 public class makeProxy implements Star{ 
  People maketimer; 
  public makeProxy(Star  maketimer) { 
   this.maketimer=maketimer; 
  } 

  public void maketime(String msg) { 
  maketimer.maketime(msg); 
  } 

  public void maketime(String msg,String placename) { 
  maketimer.maketime(msg); 
  makeplace(placename); 
  } 

  private void makeplace(String placename){ 
  System.out.println("地点是:"+placename); 
  } 
  } 
  } 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics