博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】—— 代理模式Proxy
阅读量:5900 次
发布时间:2019-06-19

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

  前言:【】——————————by xingoo

  模式意图

  代理模式为其他的对象增加一个代理对象,进行访问控制。从而避免直接访问一个对象,造成效率或者安全性上的降低。

  应用场景

  1 远程代理,为一个远程对象,创建一个本地的代理对象。每次访问,直接访问本地代理对象即可。

  2 虚代理,如果对象很大,直接访问开销很大,可以为他创建一个代理对象,只生成关键的信息即可。

  3 保护代理,为某个对象增加一种保护机制,只有一定的权限才能通过这个代理,访问后面的对象。

  4 智能指针,有点像C++里面的那个智能指针,为指针进行计数和销毁等操作。避免出现悬垂指针等现象。

  模式结构

  Subject 类接口,定义代理类,实现类等的规范。

interface Subject{    public void request();}

  RealSubject 真正的对象

class RealSubject implements Subject{    public void request() {        System.out.println("ConcreteSubject request()");    }}

  ProxySubject 代理类,可以对真正的实现部分加上一种类似装饰的效果。看!多像AOP

class ProxySubject implements Subject{    private RealSubject subject;        public void request() {        preRequest();                if(subject == null){            subject = new RealSubject();        }        subject.request();                postRequest();    }        public void preRequest(){        System.out.println("ConcreteSubject preRequest()");    }        public void postRequest(){        System.out.println("ConcreteSubject postRequest()");    }}

  全部代码

1 package com.xingoo.Proxy; 2 interface Subject{ 3     public void request(); 4 } 5 class ProxySubject implements Subject{ 6     private RealSubject subject; 7      8     public void request() { 9         preRequest();10         11         if(subject == null){12             subject = new RealSubject();13         }14         subject.request();15         16         postRequest();17     }18     19     public void preRequest(){20         System.out.println("ConcreteSubject preRequest()");21     }22     23     public void postRequest(){24         System.out.println("ConcreteSubject postRequest()");25     }26 }27 class RealSubject implements Subject{28     public void request() {29         System.out.println("ConcreteSubject request()");30     }31 }32 public class Client {33     public static void main(String[] args) {34         Subject subject = new ProxySubject();35         subject.request();36     }37 }
View Code

  运行结果

ConcreteSubject preRequest()ConcreteSubject request()ConcreteSubject postRequest()

 

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

你可能感兴趣的文章
数据库技术-为什么在MySQL中只使用InnoDB
查看>>
amazon 汇总
查看>>
cookie 和 session
查看>>
快速知道Windows server2008安装了哪些重要的服务
查看>>
SQL中利用DMV进行数据库性能分析
查看>>
VMware View 5.0从菜鸟到高手系列 5 -配置View Connection Server
查看>>
C# winfrom中创建,读,写、加密ini文件【DES】
查看>>
U盘安装centos7操作系统
查看>>
顺序查找,折半查找,二叉排序树的建立,哈希表的建立
查看>>
UESTC 2014 Summer Training #7 Div.2
查看>>
《气场》读书笔记
查看>>
Android NDK开发Crash错误定位
查看>>
ELK + kafka + filebeat +kibana
查看>>
JQuery强化教程 —— jQuery Easing
查看>>
MongoDB的索引
查看>>
[20180619]oradebug peek.txt
查看>>
hdu1087(求最大上升子列和 )
查看>>
Oracle Install
查看>>
会议2.2
查看>>
数据结构化与保存
查看>>