浅谈自己对Java代理模式的理解--即为什么要用&怎么用
2017-08-14 12:02
344 查看
首先,国际惯例,上Java代理模式的定义:
Java代理模式:对其他对象提供一种代理以控制对这个对象的访问。
定义很简单,就一句话,怎么去理解,不急,先听一个小故事:
故事角色:小明(从小斗智斗勇,多次死里逃生,逼格高),小王(还未成长为隔壁老王的四好青年)
一日,公司boss让小明写一个登陆程序,并打印出登陆用名,小明面带诡异的微笑,“啪啪”敲出代码:
小王看完小明所写的代码,直呼“WTF!!!”,BOSS又不让改动源码,“哈哈,不过山人自有妙计。嘿嘿!!!看来下次要搬到BOSS隔壁去啊!!!”
几日后,小王凭借超人的智慧及无可阻挡的魅力,在BOSS的小别墅里完成了代码:
面对以下的结果,boss无奈长叹一声!
故事结束,这个故事简洁明了的说出了代理的作用,及为什么要用代理:老板不让小王更改小明所写的登陆类LoginPrint。小王采取的方法就是采用代理模式写出了登陆验证ProxyClass,完成任务。
Java代理模式:对其他对象提供一种代理以控制对这个对象的访问。
定义很简单,就一句话,怎么去理解,不急,先听一个小故事:
故事角色:小明(从小斗智斗勇,多次死里逃生,逼格高),小王(还未成长为隔壁老王的四好青年)
一日,公司boss让小明写一个登陆程序,并打印出登陆用名,小明面带诡异的微笑,“啪啪”敲出代码:
//先写个接口吧 public interface LoginInterface { void print(); }
//实现登陆程序打印 public class LoginPrint implements LoginInterface { @Override public void print() { System.out.println("小明!"); } }小明将所写代码提交给boss,翌日小明被boss打死(BOSS:尼玛,登陆验证都没有哦),boss又叫小王继续完成这个登陆程序,加上登陆验证,但不准改动小明所写的源代码(BOSS:哼,这小王最近跟我小姨子走的太近了!!!)。
小王看完小明所写的代码,直呼“WTF!!!”,BOSS又不让改动源码,“哈哈,不过山人自有妙计。嘿嘿!!!看来下次要搬到BOSS隔壁去啊!!!”
几日后,小王凭借超人的智慧及无可阻挡的魅力,在BOSS的小别墅里完成了代码:
public class ProxyClass implements LoginInterface { private LoginInterface proxyInterface; public ProxyClass(LoginInterface proxyInterface){ this.proxyInterface=proxyInterface; } //登陆验证 public void loginCheck(String username,String password){ if(username.equals("xiaoming")&&password.equals("123456")){ System.out.println("验证通过!"); print(); }else{ System.out.println("验证未通过!"); } } @Override public void print() { proxyInterface.print(); } }次日,提交BOSS,BOSS满怀心事的验证小王的代码:
public class Test { public static void main(String[] args) { LoginPrint realClass=new LoginPrint(); ProxyClass proxyClass=new ProxyClass(realClass); proxyClass.loginCheck("xiaoming","123456"); } }
面对以下的结果,boss无奈长叹一声!
故事结束,这个故事简洁明了的说出了代理的作用,及为什么要用代理:老板不让小王更改小明所写的登陆类LoginPrint。小王采取的方法就是采用代理模式写出了登陆验证ProxyClass,完成任务。
相关文章推荐
- 怎么深刻理解自己的机器
- C语言深度解剖(精讲版)——读书笔记25 &&自己的一些理解
- 浅谈自己对防火墙的理解
- 一方面是我们技术不行、另一方面很可能没意识到自己不行,到底哪里为什么不行?到底怎么做才算好? zhuan zai
- 浅谈json,自己初认识json,写下自己对其概念的理解。
- <为什么>要有virtual,及如何理解晚捆绑
- 怎么理解,java语言是跨平台的?即什么是跨平台?C也说自己是跨平台的,怎么理解?
- linux的虚拟内存是4G,而每个进程都有自己独立的4G内存空间,怎么理解?
- C语言深度解剖(精讲版)——读书笔记2 &&自己的一些理解
- 【眼见为实】自己动手实践理解数据库READ UNCOMMITED && SERIALIZABLE
- java 多线程实例,自己写的第一个例子,理解什么是多线程,怎么写多线程
- 浅谈自己对构造函数、析构函数、复制构造函数的理解
- 怎么理解TL 和自己的差距
- 浅谈自己对异步交互、同步交互的理解
- 提问c# action<> func<> 这2个委托怎么用和理解
- ZOJ1586 恩 最小生成树 也不知道怎么 自己的 时间受限 后来终于搞对了 也知道时间受限为什么了 你不停止 当然时间受限啊!!
- 浅谈模拟java动态代理(自己的理解,里面代码是马士兵老师的代码)
- C语言深度解剖(精讲版)——读书笔记7 &&自己的一些理解
- C语言深度解剖(精讲版)——读书笔记12 &&自己的一些理解
- 【眼见为实】自己动手实践理解数据库REPEATABLE READ && Next-Key Lock