JAVA设计模式之代理模式

情景对话玩转java设计模式 - 代理模式 最近一直在看一些框架的源码,发现到最后很多地方都用到代理,尤其是动态代理。例如SpringData jpa中EntityManager的创建过程。在23种设计模式中有一种模式就是代理模式,这里打算对这种模式整理一下,并从源码的角度分析一下对象是如何生成出来的。个人觉得这个模式是23种当中最难的一种,深研究的话需要追述到jvm,这里尽量讲明白,不足之处希望大家指正。 定义 所谓的代理,就是中介,也就是说给目标对象提供一个代理(中介)对象,并由这个中介对象去控制对目标对象的引用。这样做的好处是: 通过代理. 阅读详情

【代理模式应用场景举例】

比如在玩“极品飞车”这款游戏,如果游戏者手中的金钱达到了一定的数量就可以到车店买一部性能更高的赛车,那么这个卖车的“车店”就是一个典型的“汽车厂家”的“代理”,他为汽车厂家“提供卖车的服务”给有需求的人士。从面向对象的方面考虑,“销售汽车的代理”也是一个对象,那么这个对象也具有一定的状态,在软件项目中这个对象也具有管理财务进销存的基本功能,那么在设计时就要以面向OOP编程的思想来考虑软件的类结构,这个销售汽车的代理也是一个类了。

【代理模式解释】

类型:结构模式

对一些对象提供代理,以限制那些对象去访问其它对象。

【代理模式-JAVA代码实现】

新建一个买车的接口:

[java] view plain copy
  1. public interface buy_car {  
  2.   public void buy_mycar();  
  3. }  


 

新建一个people人类,具有买车的行为,所以实现接口buy_car

[java] view plain copy
  1. class people implements buy_car {  
  2.    
  3.    private int cash;  
  4.    private String vip;  
  5.    private String username;  
  6.     
  7.  @Override  
  8.  public void buy_mycar() {  
  9.   // TODO Auto-generated method stub  
  10.   System.out.print(username+"是vip 客户,可以直接购买新车!");  
  11.  }  
  12.   
  13. public int getCash(){  
  14.       return cash;  
  15.    }  
  16.    public void setCash(int cash){  
  17.        this.cash = cash;  
  18.     }  
  19.    public String getUsername(){  
  20.        return username;  
  21.     }  
  22.    public void setUsername(String username){  
  23.        this.username = username;  
  24.     }  
  25.    public String getVip(){  
  26.        return vip;  
  27.     }  
  28.    public void setVip(String vip){  
  29.         this.vip = vip;  
  30.    }  
  31. }  

people类不能拥有车,必须经过proxy代理类的认证,符合条件之后才可以拥有车辆,新建一个代理,这个代理类来考察当前的people是否有资格进行买车:

[java] view plain copy
  1. class proxyclass implements buy_car {  
  2.      
  3.     private people people;  
  4.     public people getPeople(){  
  5.      return people;  
  6.     }  
  7.     public void setPeople(people people){  
  8.      this.people = people;  
  9.     }  
  10.       
  11.  @Override  
  12.  public void buy_mycar() {  
  13.   // TODO Auto-generated method stub  
  14.     
  15.   if (people.getVip() == "vip"){  
  16.       people.buy_mycar();  
  17.       return ;  
  18.      }   
  19.     if(people.getCash()>=50000){  
  20.      System.out.println(people.getUsername()+"买了新车,交易结束!");  
  21.     }  
  22.     else  
  23.     {  
  24.      System.out.println(people.getUsername()+"钱不够,不能买车,继续比赛!");  
  25.     }  
  26.  }  
  27. }  

最后创建一个客户端,用来模拟买车的行为:

[java] view plain copy
  1. public class run_main {  
  2.   
  3.   
  4.  public static void main(String[] args) {  
  5.   // TODO Auto-generated method stub  
  6.       people people_1 =new people();  
  7.       people_1.setCash(60000);  
  8.       people_1.setUsername("jeck");  
  9.   
  10.   
  11.       people people_2 =new people();  
  12.       people_2.setCash(40000);  
  13.       people_2.setUsername("rose");  
  14.        
  15.       people people_3 =new people();  
  16.   
  17.       people_3.setCash(0);  
  18.       people_3.setUsername("tom");  
  19.       people_3.setVip("vip");  
  20.        
  21.       proxyclass proxy_buy = new proxyclass();  
  22.       proxy_buy.setPeople(people_1);  
  23.       proxy_buy.buy_mycar();  
  24.        
  25.       proxy_buy.setPeople(people_2);  
  26.       proxy_buy.buy_mycar();  
  27.        
  28.       proxy_buy.setPeople(people_3);  
  29.       proxy_buy.buy_mycar();  
  30.              
  31.  }  
  32.   
  33. }  

程序运行结果如下:

[java] view plain copy
  1. jeck买了新车,交易结束!  
  2. rose钱不够,不能买车,继续比赛!  
  3. tom是vip 客户,可以直接购买新车!  

 

代理模式主要使用了java的多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚得很,同样一个接口。

作者:jason0539

微博:http://weibo.com/2553717707

博客:http://blog.youkuaiyun.com/jason0539(转载请说明出处)

Java 24 Design Pattern 之 代理模式 代理模式 阅读详情

相关推荐

PDDL入门

PDDL的组成部分 Objects:对象,世界上我们感兴趣的事物。 Predicates:谓词,我们感兴趣的事实(例如对象的属性),可以为真,也可以为假。 An initial state:初始化状态,我们开始所处的世界状态,即开始时为真的事物。 Goal specification:目标状态,我们想要结束的世界的状态,即我们希望最终成为真实的事情。 Actions/Operators:动作/操作,改变世界状态的方式,即发生的事情改变了事实。 PDDL语法 PDDL 文件的扩展名通常是.pddl 要

工控小白2021的博客 4821

Java 中的 23 种设计模式详解

项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

微笑听雨 7万+

Linux下自动化解析q7签名文件的有效期与时间戳

本文详细介绍了在Linux环境下自动化解析q7签名文件有效期与时间戳的方法。通过编写高效脚本,开发者可以批量提取签名时间信息,验证签名有效性,并集成到CI/CD流程中。文章提供了完整的脚本实现,包括错误处理、批量处理功能,并解决了常见环境问题,特别适用于国产操作系统如UOS的开发场景。

weixin_30872499的博客 519

Java中23种设计模式

Java中23种设计模式,包括简单介绍,适用场景以及优缺点等

呜呜老司机的博客家园 9万+

Shopee动态参数x-sap-Ri与x-sap-Sec逆向解析实战

现代电商前端反爬普遍采用动态参数校验机制,其核心是将设备指纹、DOM状态与时间上下文耦合生成不可复用的请求凭证。x-sap-Ri本质是渲染上下文唯一标识,依赖真实浏览器环境中的DOM树结构、Canvas像素指纹及毫秒级时间扰动;x-sap-Sec则是基于该标识与服务端同步密钥生成的HMAC-SHA256签名,具备强时效性与密钥轮换特性。这类机制显著提升了自动化采集门槛,广泛应用于Shopee商品详情页等高价值数据接口。本文聚焦于从Chrome DevTools调试出发,系统还原参数生成逻辑,覆盖DOM一致性

weixin_30603633的博客 896

FPGA篮球计分器:从需求分析到模块化实现的实战指南

本文详细介绍了FPGA篮球计分器的设计与实现,涵盖需求分析、模块化设计及实战调试。重点解析了24秒精确倒计时、12分钟比赛计时、比分统计和数码管显示等核心模块的Verilog实现,提供了按键消抖、状态机设计和BCD码处理等关键技术细节,帮助开发者掌握FPGA数字系统设计方法。

sql99的博客 218

一文讲完Java常用设计模式(全23种)

设计模式是软件开发中非常有用的工具,可以提高代码的可重用性和可维护性,同时也可以提高开发人员的工作效率。 设计模式有几种类型,包括创建型、结构型和行为型模式。 创建型模式用于以灵活和高效的方式创建对象。包括Singleton模式、工厂模式和抽象工厂模式等。 结构型模式用于组合类和对象以形成更大的结构。包括适配器模式、桥接模式和装饰器模式等。 行为型模式用于处理类或对象之间的通信和控制流。包括观察者模式、策略模式和模板方法模式。

不积跬步无以至千里,不积小流无以成江海。一个喜欢学习分享的程序员 4万+

我用 Python 监听了自己的键盘,生成击键热力图,看看每天到底在“摸鱼”还是“搬砖”?

数据采集(监听)、持久化(I/O)与可视化展示,必须是三个完全独立的模块,这符合单一职责原则。在多线程读写 Python 字典时,锁住的时间要尽可能短,防止 I/O 线程把高频的监听线程阻塞住。这类涉及底层的代码与“键盘记录木马”只有一线之隔。永远不要把击键记录通过网络上传,所有数据必须localhost消化。人脑对枯燥的 JSON 日志是不敏感的,但对颜色和空间极其敏感。这也是为什么 Prometheus + Grafana 是标配。使用ctypes。

BUG猿的博客 193

Java中常用的设计模式

文章转载借鉴:http://blog.youkuaiyun.com/zhangerqing 一、什么是设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块...

Superme 13万+

2 中望CAD二次开发-绘制图形(ZRX C++)

本文讲解中望CAD二次开发,关于块的概念及基本图形的绘制

cilvsuanna的博客 411

车载以太网:PHY(物理层)介绍

本文以TJA1101芯片为实例介绍了车载以太网PHY(物理层)组成。

kevin1499的博客 6231

JAVA中23种设计模式

一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式: 共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式: 共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式: 共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式

qw_0214的博客 1617

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件概述(ArkSIM集成开发环境 (IDE))

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件详述(ArkSIM集成开发环境 (IDE))

920

java设计模式之 代理模式【Proxy Pattern】 详解

首先我们举个例子说明一下什么是策略模式: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被 代理的人能干活呀。 比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的: 先定义一种类型的女人: package com.cbf4lif...

蛋蛋淡淡定的庄园 299

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java开发之设计模式--代理模式(Proxy Pattern)

什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。模拟场景:比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理。Java程序: 先定义一种类型的女人: package com.zanelove.proxy; /** * I'm glad

ZaneLove's blog 1075

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java 设计模式之代理模式

代理模式(Proxy Pattern)是一种经典的设计模式,它提供了一个代理对象来控制对另一个对象的访问。代理模式主要解决的是对象直接的业务关系,即将行为请求和行为实现分离出来,以达到增强类的功能的目的。

melck的博客 357

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java23种设计模式之代理模式的学习

源码链接(Gitee码云):https://gitee.com/oldou/javadesignpatterns 这里有我整理好的Java23种设计模式的源码以及博客教程,博客教程中介绍了Java23种设计的模式的各种实现方式以及应用场景,非常适用于学习以及提高我们的设计思维,如果对大家有所帮助,请记得star一下给予作者一定的精神支持,你的star是我写出更好的博客的动力,谢谢大家。 代理模式(proxy pattern) 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种..

weixin_43246215的博客 2202

java设计模式之代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 模式介绍: 意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些曹祖需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象

li_w_ch的博客 209

图解Java设计模式之代理模式

图解Java设计模式之代理模式代理模式的基本介绍静态代理模式的基本介绍应用实例静态代理优缺点动态代理模式的基本介绍JDK中生成代理对象的API动态代理应用实例 代理模式的基本介绍 1)代理模式 :为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象。这样做的好处是 :可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。 2)被代理的对象可以是远程对象、创建开...

不一样的花朵的博客 513

【Java设计模式】代理模式

【Java设计模式】代理模式 1、Java代理模式的基本介绍 首先得跟大家说明白,本篇文章的设计模式实现是基于Java语言的,思想还是代理的思想,不要纠结于我为什么将静态代理,动态代理,cglib代理分开来说(只能说技术是技术,思想是思想) 代理模式:为一个对象提供一个替身,以控制对这个对象的访问;即通过代理对象访问目标对象;这样做的好处是可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能; 被代理的对象可以是远程的对象、开销大的对象或者需要被安全控制保护的对象; Java的手段实现代理模

weixin_39915192的博客 2167

Java设计模式-代理模式

Java设计模式-代理模式 什么是代理模式? 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 所谓的代理严格来讲就是两个子类共同实现一个接口,其中一个子类负责真实业务实现,另一个辅助完成主类业务逻辑操作。 代理模式 UML图: 源代码: interface ISubject{//操作主题 public void get();//要钱 } class RealSubject imp

Java厂长 5864

Java设计模式之代理模式

设计模式 在说代理模式之前先说说什么是设计模式吧。 简单来说设计模式就是用来解决不同问题的一种思路。这就很好理解了,就不如说你遇到了不同的问题,每个问题都有每个问题的解决方法。 代理模式 既然设计模式是用来解决不同问题的,那么接下来就来讲讲代理模式主要是用来解决什么问题的吧。 代理模式的意义在于能够帮助被代理对象做更多的事情,而不去破坏原先的代码结构。这里主要是在特定的业务环境中...

qq_40585236的博客 285

Java设计模式——代理模式

Java设计模式——代理模式 一、代理模式的特点:两个子类共同实现一个接口,其中一个子类负责真实业务实现,另一个子类完成辅助真实业务主题的操作。(两个子类实现一个接口,一个类干事情,另一个类辅助它干事情) 二、代理模式的实例:   1、接口:买电脑   2、真实主题类:你要买电脑   3、代理类:代购 三、代理模式的应用:Spring-AOP ...

xiaoaxiao 336

代理模式——举例说明Java23种设计模式中的代理模式

代理模式——举例说明Java23种设计模式中的代理模式1. 概述1.1 定义1.2 组成部分2. 静态代理2.1 引出代理模式的一个简单业务场景2.2 静态代理例子1:2.3 静态代理例子2:3. 动态代理3.1 JDK代理(接口代理)3.1.1 JDK动态代理例子13.1.2 JDK动态代理例子2分析3.1.3 JDK动态代理例子33.2 Cglib 代理4. 附代码4.1 静态代理代码4.1 例子1代码4.2 例子2代码4.2 动态代理代码4.1 JDK 动态代理4.1.1 JDK 动态代理例子14.1

@素素~的博客 1990
上一篇: JAVA设计模式初探之装饰者模式
下一篇: JAVA设计模式之门面模式(外观模式)
Laputa_Net
博客等级 码龄9年 5粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值