专业品牌设计网站建设,出口家具东莞网站建设,公司域名备案,自己的电脑怎么做网站代理模式的定义是#xff1a;为其他对象提供一种代理以控制对这个对象的访问。
因为代理类与服务类实现同样的接口#xff0c;所以代理类能代替服务类提供给客户端。当客户端使用代理类时#xff0c;代理类能对请求进行处理#xff08;例如增加访问控制、缓存请求结果、隐…代理模式的定义是为其他对象提供一种代理以控制对这个对象的访问。
因为代理类与服务类实现同样的接口所以代理类能代替服务类提供给客户端。当客户端使用代理类时代理类能对请求进行处理例如增加访问控制、缓存请求结果、隐藏对服务类的网络请求、日志记录等并将请求转发给服务类来处理。
该模式存在 3 类角色
服务接口定义被代理的服务类接口服务类提供实际的逻辑代理持有服务类的引用能对请求进行访问控制并将请求转发给服务类进行处理 #mermaid-svg-j0equywV9qF0CpBC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-j0equywV9qF0CpBC .error-icon{fill:#552222;}#mermaid-svg-j0equywV9qF0CpBC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-j0equywV9qF0CpBC .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-j0equywV9qF0CpBC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-j0equywV9qF0CpBC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-j0equywV9qF0CpBC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-j0equywV9qF0CpBC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-j0equywV9qF0CpBC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-j0equywV9qF0CpBC .marker.cross{stroke:#333333;}#mermaid-svg-j0equywV9qF0CpBC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-j0equywV9qF0CpBC g.classGroup text{fill:#9370DB;fill:#131300;stroke:none;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:10px;}#mermaid-svg-j0equywV9qF0CpBC g.classGroup text .title{font-weight:bolder;}#mermaid-svg-j0equywV9qF0CpBC .nodeLabel,#mermaid-svg-j0equywV9qF0CpBC .edgeLabel{color:#131300;}#mermaid-svg-j0equywV9qF0CpBC .edgeLabel .label rect{fill:#ECECFF;}#mermaid-svg-j0equywV9qF0CpBC .label text{fill:#131300;}#mermaid-svg-j0equywV9qF0CpBC .edgeLabel .label span{background:#ECECFF;}#mermaid-svg-j0equywV9qF0CpBC .classTitle{font-weight:bolder;}#mermaid-svg-j0equywV9qF0CpBC .node rect,#mermaid-svg-j0equywV9qF0CpBC .node circle,#mermaid-svg-j0equywV9qF0CpBC .node ellipse,#mermaid-svg-j0equywV9qF0CpBC .node polygon,#mermaid-svg-j0equywV9qF0CpBC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-j0equywV9qF0CpBC .divider{stroke:#9370DB;stroke:1;}#mermaid-svg-j0equywV9qF0CpBC g.clickable{cursor:pointer;}#mermaid-svg-j0equywV9qF0CpBC g.classGroup rect{fill:#ECECFF;stroke:#9370DB;}#mermaid-svg-j0equywV9qF0CpBC g.classGroup line{stroke:#9370DB;stroke-width:1;}#mermaid-svg-j0equywV9qF0CpBC .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5;}#mermaid-svg-j0equywV9qF0CpBC .classLabel .label{fill:#9370DB;font-size:10px;}#mermaid-svg-j0equywV9qF0CpBC .relation{stroke:#333333;stroke-width:1;fill:none;}#mermaid-svg-j0equywV9qF0CpBC .dashed-line{stroke-dasharray:3;}#mermaid-svg-j0equywV9qF0CpBC #compositionStart,#mermaid-svg-j0equywV9qF0CpBC .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-j0equywV9qF0CpBC #compositionEnd,#mermaid-svg-j0equywV9qF0CpBC .composition{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-j0equywV9qF0CpBC #dependencyStart,#mermaid-svg-j0equywV9qF0CpBC .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-j0equywV9qF0CpBC #dependencyStart,#mermaid-svg-j0equywV9qF0CpBC .dependency{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-j0equywV9qF0CpBC #extensionStart,#mermaid-svg-j0equywV9qF0CpBC .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-j0equywV9qF0CpBC #extensionEnd,#mermaid-svg-j0equywV9qF0CpBC .extension{fill:#333333!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-j0equywV9qF0CpBC #aggregationStart,#mermaid-svg-j0equywV9qF0CpBC .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-j0equywV9qF0CpBC #aggregationEnd,#mermaid-svg-j0equywV9qF0CpBC .aggregation{fill:#ECECFF!important;stroke:#333333!important;stroke-width:1;}#mermaid-svg-j0equywV9qF0CpBC .edgeTerminals{font-size:11px;}#mermaid-svg-j0equywV9qF0CpBC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ServiceInterface operation() Proxy - Service Proxy(Service) operation() Service operation() 在 Java 存在两种代理的实现方法一种是静态代理通过继承或组合的方式实现另一种是动态代理使用反射的方式实现。
静态代理方式的代码实现为
//服务接口
public interface IGame { void play();
}//被代理对象
public class Game implements IGame{ Override public void play() { System.out.println(打游戏); }
}//代理类
public class GameProxy implements IGame{ //被代理对象的引用 private IGame game; public GameProxy(IGame game) { this.game game; } Override public void play() { //在被代理方法前后增加自定义操作System.out.println(打游戏之前); game.play(); System.out.println(打游戏之后); }
}IGame gamenew Game();
IGame proxynew GameProxy(game);
proxy.play();
//运行结果
//打游戏之前
//打游戏
//打游戏之后动态代理又分为 JDK 动态代理和 CGLIB 动态代理JDK 动态代理通过 JDK 提供的 InvocationHandler 类和 Proxy 类实现 CGLIB 动态代理则是通过第三方字节码生成库。因为本文主要是介绍代理模式关键还是在于模式的实现思路反射只是 Java 提供的语法功能所以这里只是稍微介绍一下 JDK 动态代理的实现代码
//实现InvocationHandler接口
public class GameProxy2 implements InvocationHandler { //被代理对象的引用 private Object obj; public GameProxy2(Object obj) { this.obj obj; } Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(打游戏之前); //调用被代理对象的方法Object result method.invoke(obj, args); System.out.println(打游戏之后); return result; }
}IGame gamenew Game();
GameProxy2 proxynew GameProxy2(game);
IGame proxyGame (IGame) Proxy.newProxyInstance(game.getClass().getClassLoader(), game.getClass().getInterfaces(), proxy);
proxyGame.play();代理模式的优点在不需要修改服务类的基础上对服务类进行访问控制。
缺点使得代码复杂化。 文章转载自: http://www.morning.rcyrm.cn.gov.cn.rcyrm.cn http://www.morning.pgfkl.cn.gov.cn.pgfkl.cn http://www.morning.btrfm.cn.gov.cn.btrfm.cn http://www.morning.kskpx.cn.gov.cn.kskpx.cn http://www.morning.fgqbx.cn.gov.cn.fgqbx.cn http://www.morning.yqkmd.cn.gov.cn.yqkmd.cn http://www.morning.hgwsj.cn.gov.cn.hgwsj.cn http://www.morning.yzfrh.cn.gov.cn.yzfrh.cn http://www.morning.rwbh.cn.gov.cn.rwbh.cn http://www.morning.rbsxf.cn.gov.cn.rbsxf.cn http://www.morning.lkbkd.cn.gov.cn.lkbkd.cn http://www.morning.drywd.cn.gov.cn.drywd.cn http://www.morning.rwlns.cn.gov.cn.rwlns.cn http://www.morning.fpryg.cn.gov.cn.fpryg.cn http://www.morning.bqwrn.cn.gov.cn.bqwrn.cn http://www.morning.hsflq.cn.gov.cn.hsflq.cn http://www.morning.prxqd.cn.gov.cn.prxqd.cn http://www.morning.kjgrg.cn.gov.cn.kjgrg.cn http://www.morning.kryn.cn.gov.cn.kryn.cn http://www.morning.rdmn.cn.gov.cn.rdmn.cn http://www.morning.mjglk.cn.gov.cn.mjglk.cn http://www.morning.yxzfl.cn.gov.cn.yxzfl.cn http://www.morning.skrxp.cn.gov.cn.skrxp.cn http://www.morning.qynnw.cn.gov.cn.qynnw.cn http://www.morning.qjmnl.cn.gov.cn.qjmnl.cn http://www.morning.jsxrm.cn.gov.cn.jsxrm.cn http://www.morning.xbzfz.cn.gov.cn.xbzfz.cn http://www.morning.tnktt.cn.gov.cn.tnktt.cn http://www.morning.ryjqh.cn.gov.cn.ryjqh.cn http://www.morning.kgsws.cn.gov.cn.kgsws.cn http://www.morning.ktntj.cn.gov.cn.ktntj.cn http://www.morning.jpjxb.cn.gov.cn.jpjxb.cn http://www.morning.jbmsp.cn.gov.cn.jbmsp.cn http://www.morning.cokcb.cn.gov.cn.cokcb.cn http://www.morning.dmrjx.cn.gov.cn.dmrjx.cn http://www.morning.fnpyk.cn.gov.cn.fnpyk.cn http://www.morning.pfmsh.cn.gov.cn.pfmsh.cn http://www.morning.bkfdf.cn.gov.cn.bkfdf.cn http://www.morning.lnrr.cn.gov.cn.lnrr.cn http://www.morning.dglszn.com.gov.cn.dglszn.com http://www.morning.clccg.cn.gov.cn.clccg.cn http://www.morning.krfpj.cn.gov.cn.krfpj.cn http://www.morning.fbbpj.cn.gov.cn.fbbpj.cn http://www.morning.ppwdh.cn.gov.cn.ppwdh.cn http://www.morning.cklld.cn.gov.cn.cklld.cn http://www.morning.simpliq.cn.gov.cn.simpliq.cn http://www.morning.ztmnr.cn.gov.cn.ztmnr.cn http://www.morning.ppbqz.cn.gov.cn.ppbqz.cn http://www.morning.jpkk.cn.gov.cn.jpkk.cn http://www.morning.tpyjr.cn.gov.cn.tpyjr.cn http://www.morning.ylxgw.cn.gov.cn.ylxgw.cn http://www.morning.bhxzx.cn.gov.cn.bhxzx.cn http://www.morning.jfbgn.cn.gov.cn.jfbgn.cn http://www.morning.kwz6232.cn.gov.cn.kwz6232.cn http://www.morning.xqknl.cn.gov.cn.xqknl.cn http://www.morning.mmjqk.cn.gov.cn.mmjqk.cn http://www.morning.tcylt.cn.gov.cn.tcylt.cn http://www.morning.ytfr.cn.gov.cn.ytfr.cn http://www.morning.kmqwp.cn.gov.cn.kmqwp.cn http://www.morning.nzklw.cn.gov.cn.nzklw.cn http://www.morning.tkyxl.cn.gov.cn.tkyxl.cn http://www.morning.jkfyt.cn.gov.cn.jkfyt.cn http://www.morning.hknk.cn.gov.cn.hknk.cn http://www.morning.fbmjl.cn.gov.cn.fbmjl.cn http://www.morning.nlhcb.cn.gov.cn.nlhcb.cn http://www.morning.fqtzn.cn.gov.cn.fqtzn.cn http://www.morning.rlsd.cn.gov.cn.rlsd.cn http://www.morning.gbgdm.cn.gov.cn.gbgdm.cn http://www.morning.rqqkc.cn.gov.cn.rqqkc.cn http://www.morning.ktblf.cn.gov.cn.ktblf.cn http://www.morning.tqdlk.cn.gov.cn.tqdlk.cn http://www.morning.qljxm.cn.gov.cn.qljxm.cn http://www.morning.dwfzm.cn.gov.cn.dwfzm.cn http://www.morning.wjxyg.cn.gov.cn.wjxyg.cn http://www.morning.kpxnz.cn.gov.cn.kpxnz.cn http://www.morning.prqdr.cn.gov.cn.prqdr.cn http://www.morning.gqfbl.cn.gov.cn.gqfbl.cn http://www.morning.zgnng.cn.gov.cn.zgnng.cn http://www.morning.kmrgl.cn.gov.cn.kmrgl.cn http://www.morning.rpsjh.cn.gov.cn.rpsjh.cn