代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。

这种类型的设计模式属于结构型模式。

在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

这样的意图是:为其他对象提供一种代理以控制对这个对象的访问。

使用场景:当我们想在访问一个类时做一些操作和控制,同时扩展类的功能时,就可以使用代理模式。

静态代理

由程序员创建代理类或者特定的工具自动生成源代码在对其进行编译,静态代理事先知道要代理的是什么,即代理对象一开始就是已知的

被代理对象和代理对象继承相同的接口或者父类(一般是继承接口)

举个简单例子:

猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。

类图关系:

代码实现:

/*** 静态代理* 代理类和被代理类都实现接口或抽象类,通过代理类来对被代理类进行操作*/
public class StaticProxy {public static void main(String[] args) {
//        猪八戒进高老庄,先背上了孙悟空,孙悟空考验猪八戒,成功new SWK(true);
//        失败new SWK(false);}
}
//例子
/*** 猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:* 把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,* 猪八戒访问高翠兰的时候看不出来这个是孙悟空,* 所以说孙悟空是高翠兰代理类* 孙悟空看猪八戒的表现来决定是否让猪八戒看真的高翠兰*/
abstract class Aspect{String name;public abstract void doSomething();
}
class GCL extends Aspect{String name = "高翠兰";public GCL(){doSomething();}@Overridepublic void doSomething() {System.out.println("和高翠兰见面");}
}
class SWK extends Aspect{String name = "孙悟空变的高翠兰";boolean qual;public SWK(boolean qual){this.qual = qual;doSomething();}@Overridepublic void doSomething() {System.out.println("判断是否有资格和高翠兰见面");if(qual){//有资格,就让猪八戒见真的高翠兰new GCL();}else {System.out.println("死												

最新文章

  1. plsql programming 10 日期和时间戳
  2. VMware下安装的CentOS 7如何配置IP地址并能与Windows物理机ping通
  3. 博物馆自动灭火系统应如何选择
  4. Swoole之I/O操作
  5. enspac启动失败代码2_电脑蓝屏代码0x000024
  6. [译]ASP.NET Core 2.0 带初始参数的中间件
  7. 2019 ICPC 南京 F. Paper Grading(字典树dfs序上树套树)
  8. Java多线程并发学习-进阶大纲
  9. 我被认定为高层次人才了!
  10. 关于日志记录的一些感想
  11. python爬虫(四)_urllib2库的基本使用
  12. quartus调用74系列的芯片
  13. python中width是什么意思_python – tkinter中的标签宽度
  14. 西蒙斯的赚钱秘籍:隐马尔科夫模型(HMM)的择时应用
  15. Dymola — 多学科系统仿真平台
  16. blender基本翻译+快捷键
  17. 研发 | Unity资源商店里的免费资源,你一定要知道!
  18. DirectX11--ComPtr智能指针
  19. [Spring]~@Valid(实体类参数校验)
  20. vue 拖拽【单个div实现拖拽】

热门文章

  1. 解决VirtualBox不能为虚拟电脑打开一个新任务
  2. 数理逻辑 形式可推演与逻辑推论
  3. KISSY基础篇乄KISSY之优化实例
  4. 半钧先生:分享一波超赞的冬至文案,句句暖到心!
  5. TheFourthJavaText
  6. Spice Model 解读
  7. 奥鹏教师计算机培训总结,奥鹏信息技术应用能力提升培训总结交流
  8. 麦肯锡精英的39个工作习惯
  9. 洛谷 P2327 [SCOI2005] 扫雷
  10. (Xcode)The run destination * is not valid for Running the scheme ‘*‘.