代理模式,看这名字就知道重点是代理。所谓代理,可以理解为中介或者中间人
例如:小明喜欢一个好看的菇凉但不好意思,找到朋友小蓝像好看菇凉送礼物。这个时候小蓝就是这个代理

使用代理模式 需要了解三个东西

抽象角色: 接口或者抽象类要什么真实角色实现的业务方法(送花送礼物)

代理角色:实现抽象角色,是真实角色的代理,可以实现真实角色的实现的抽象方法,从而形成代理

真实角色:实现抽象角色的方法或者功能,让代理角色实现这些功能

代码如下:

抽象角色
interface GiveGift {
   void Give();
   void GiveDolls();
   void GiveFlowers();
   void GiveChocolate();
}

代理角色
public class Proxy implements GiveGift {
   Pursuit pursuit = null;
   public Proxy(SchoolGirl mm){
       this.pursuit = new Pursuit(mm);
  }
   @Override
   public void Give() {
       pursuit.Give();
  }
   @Override
   public void GiveDolls() {
       pursuit.GiveDolls();
  }
   @Override
   public void GiveFlowers() {
       pursuit.GiveFlowers();
  }
   @Override
   public void GiveChocolate() {
       pursuit.GiveChocolate();
  }
}

真实角色
public class Pursuit implements GiveGift {
   SchoolGirl schoolGirl = null;
   public Pursuit( SchoolGirl schoolGirl ){
       this.schoolGirl = schoolGirl;
  }
   @Override
   public void Give() {
       System.out.println("喜欢的女孩-->"+schoolGirl.getName());
  }
   @Override
   public void GiveDolls() {
       System.out.println("送洋娃娃");
  }
   @Override
   public void GiveFlowers() {
       System.out.println("送你鲜花");
  }
   @Override
   public void GiveChocolate() {
       System.out.println("送你巧克力");
  }
}
这是一个好看的菇凉
public class SchoolGirl {
   private String name;
   public String getName() {
       return name;
  }
   public void setName(String name) {
       this.name = name;
  }
}
在main方法中实现
  SchoolGirl schoolGirl = new SchoolGirl();
       schoolGirl.setName("好看菇凉");
       Proxy proxy = new Proxy(schoolGirl);
       proxy.Give();
       proxy.GiveChocolate();
       proxy.GiveDolls();
       proxy.GiveFlowers();
好看菇凉在不知道小明的情况下就通过小蓝得到了小明的礼物。

为了更好的解释这个,决定百度百科
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
优点
(1).职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
(3).高扩展性


YacaToy
2 声望3 粉丝

« 上一篇
简单工厂模式
下一篇 »
工厂模式