博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代理模式
阅读量:6452 次
发布时间:2019-06-23

本文共 1743 字,大约阅读时间需要 5 分钟。

代理模式,看这名字就知道重点是代理。所谓代理,可以理解为中介或者中间人

例如:小明喜欢一个好看的菇凉但不好意思,找到朋友小蓝像好看菇凉送礼物。这个时候小蓝就是这个代理

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

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

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

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

代码如下:

抽象角色

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).高扩展性

转载地址:http://lmgwo.baihongyu.com/

你可能感兴趣的文章
Python 模块 和 包
查看>>
简单的导出表格和将表格下载到桌面上。
查看>>
《ArcGIS Engine+C#实例开发教程》第一讲桌面GIS应用程序框架的建立
查看>>
递归查询上一级
查看>>
JAVA - 大数类详解
查看>>
查询指定名称的文件
查看>>
批处理文件
查看>>
1.每次按一下pushbutton控件,切换图片?
查看>>
Python 嵌套列表解析
查看>>
[GXOI/GZOI2019]旧词——树链剖分+线段树
查看>>
android 补间动画的实现
查看>>
2017年广东省ACM省赛(GDCPC-2017)总结
查看>>
第十届蓝桥杯B组C++题目详解和题型总结
查看>>
树的存储结构2 - 数据结构和算法42
查看>>
函数的嵌套调用
查看>>
OC中使用 static 、 extern、 const使用
查看>>
简单理解函数回调——同步回调与异步回调
查看>>
POJ 1007
查看>>
Android 多个Activity 跳转及传参
查看>>
中文文本预处理流程(带你分析每一步)
查看>>