当前位置: 首页 > news >正文

沈阳企业网站建设公司建设网站上海

沈阳企业网站建设公司,建设网站上海,做视频网站需要什么软件,北京网页制作服务现在朋友圈有好多做香港代购的微商#xff0c;大部分网民无法自己去香港购买想要的商品#xff0c;于是委托这些微商#xff0c;告诉他们想要的商品#xff0c;让他们帮我们购买。我们只需要付钱给他们#xff0c;他们就会去香港购买#xff0c;然后把商品寄给我们。这就… 现在朋友圈有好多做香港代购的微商大部分网民无法自己去香港购买想要的商品于是委托这些微商告诉他们想要的商品让他们帮我们购买。我们只需要付钱给他们他们就会去香港购买然后把商品寄给我们。这就是一种代理模式。 1 代理模式概述 引入一个新的代理对象在客户端对象和目标对象之间起到中介的作用去掉客户不能看到的内容和服务或者增添客户想要的额外服务。 图 代理模式结构图 Subject抽象主题角色。声明了真实主题和代理主题的共同接口使得在任何使用真实主题的地方都可以使用代理主题客户端通常需要针对抽象主题进行编程。Proxy代理主题角色。包含了对真实主题的引入从而可以在任何时候操作真实主题对象。通常在代理主题角色中客户端在调用所引用的真实主题操作之前或之后还需要执行其他操作而不仅是单纯调用真实主题对象中的操作。RealSubject真实主题角色。实现了真实的业务操作客户端可以通过代理主题角色间接调用真实主题角色中定义的操作。 public interface Subject {void buy(String goodsName);}public class RealSubject implements Subject{Overridepublic void buy(String goodsName) {System.out.println(购买 goodsName);}}public class ProxyBuy implements Subject {private final RealSubject realSubject new RealSubject();private void goHongKong() {System.out.println(前往香港);}Overridepublic void buy(String goodsName) {goHongKong();realSubject.buy(goodsName);sendGoods();}private void sendGoods() {System.out.println(把商品寄送給客户);} }public class Client {public static void main(String[] args) {Subject subject new ProxyBuy();subject.buy(奶粉);System.out.println(----------);subject.buy(iphone); // 运行结果 // 前往香港 // 购买奶粉 // 把商品寄送給客户 // ---------- // 前往香港 // 购买iphone // 把商品寄送給客户}}在实际开发中代理类的实现比上述代码要复杂得到。代理模式根据其目的和实现方式的不同可分为很多类。 远程代理 为一个位于不同的地址空间的对象提供一个本地的代理对象。 虚拟代理 如果需要创建一个资源消耗较大的对象先创建一个消耗相对较小的对象来表示真实对象只在需要时才会被真正创建。 保护代理 控制对一个对象的访问可以给不同的用户提供不同级别的使用权限。 缓存代理 为某一个目标操作的结果提供临时的存储空间以便多个客户端可以共享这些结果。 智能引用代理 当一个对象被引用时提供一些额外的操作。例如将对象被调用的次数记录下来。 表 常用的5种代理模式 1.1 虚拟代理 对于一些占用系统资源较多或者加载时间较长的对象可以给对象提供一个虚拟代理。在真实对象创建成功之前虚拟代理扮演真实对象的替身而当真实对象创建之后虚拟代理将用户的请求转发给真实对象。 1.1.1 适用场景 1) 由于对象本身的复杂性或者网络等原因导致一个对象需要较长的加载时间此时可以用一个加载时间较短的代理对象来代表真实对象。在程序启动时可以用代理对象代替真实对象初始化大大加速系统的启动时间。 2) 当一个对象的加载是否耗费系统资源时。虚拟代理可以让那些占用大量内存或者处理起来非常复杂的对象推迟到使用它们的时候才场景而在之前用一个相对来说占用资源较少的代理对象来代表真实对象再通过代理对象来引用真实对象。 需求在面试的时候一般都最少有两轮面试一面由项目经理负责二面由技术总监面。而最终的录取结果是由技术总监决定的。技术总监工资更高如果每个面试者都由总监面那么将会花费总监很多时间进而给公司带来更多的花费。 分析技术总监属于占用资源较多的对象不能频繁的调用。而产品经理占用的资源相对较小。在这个需求中虚拟代理为产品经理。先一轮面试把筛选后的名单给技术总监。 图 需求实现结构图 public interface Interviewer {boolean audition(String name, boolean isLastOne);}public class TechnicalDirector implements Interviewer{Overridepublic boolean audition(String name, boolean isLastOne) {Random random new Random();return random.nextInt() % 3 0;}}public class ProjectManager implements Interviewer{private final ListString passList new ArrayList();Overridepublic boolean audition(String name, boolean isLastOne) {Random random new Random();boolean pass random.nextInt() % 5 0;if (pass) passList.add(name);if (isLastOne) cassTechnicalDirector();return pass;}/*** 一轮面试完成后再叫技术总监来面试*/private void cassTechnicalDirector(){TechnicalDirector technicalDirector new TechnicalDirector();IteratorString iterator passList.iterator();ListString tempList new ArrayList();while (iterator.hasNext()) {String next iterator.next();if (technicalDirector.audition(next, !iterator.hasNext())) {tempList.add(next);}}if (tempList.size() 0) {System.out.println(没人通过面试);} else {System.out.println(以下人员通过面试);System.out.println(tempList);}} }public class Client {public static void main(String[] args) {Interviewer interviewer new ProjectManager();for (int i 0; i 5000; i) {interviewer.audition(路人 i, i 19);} // 运行结果 // 以下人员通过面试 // [路人5, 路人14, 路人16]}} ​​​​​​​1.2 Java动态代理 在传统的代理模式中客户端通过Proxy类调用RealSubject类的request()方法同时可以在代理类中封装其他方法。而代理类和真实主题类都应该是事先已经存在的。如果需要为不同的真实主题类提供代理类或者代理一个真实主题类中不同的方法都需要增加新的代理类这将导致系统的类格式急剧增加。 动态代理可以让系统能够根据实际需要来动态创建代理类让同一个代理类能够代理多个不同的真实主题类而且可以代理不同的方法。 从JDK1.3开始Java提供了对动态代理的支持。 1.2.1 InvocationHandler接口 是代理处理程序类的实现接口。作为代理实例的调用处理者的公共父类该接口只声明了一个方法 invoke(proxy,method,args): 用于处理对代理实例的方法调用并返回相应结果。第1个参数表示代理类的实例第2个参数表示需要代理的方法第3个表示代理方法的参数数组。 1.2.2 Proxy类 图 Proxy类的部分方法 最常用的方法是 newProxyInstance(classLoader,interfaces,invocationHandler), 返回一个动态创建的代理实例第1个参数表示代理类的类加载器第2个参数表示代理类所实现的接口列表与真实主题类的接口列表一致第3个参数表示所指派的调用处理程序类。getProxyClass(classLoader,class[]),返回一个Class类型的代理类第1个参数是代理类的类加载器第2个参数表示代理类所实现的接口列表。 1.2.3 动态代理实战 创建动态代理的步骤如下 1和静态代理相同首先定义一个抽象主机角色来定义代理类和真实主题类的真实接口。 public interface BuyTicket {boolean buyTicket(String start, String end);} 2创建被代理的类 public class Customer implements BuyTicket{Overridepublic boolean buyTicket(String start, String end) {System.out.println(购买 start 到 end 的火车票);Random random new Random();return random.nextInt() % 2 0;} } 3创建InvocationHandler类 public class BuyTicketInvocationHandler implements InvocationHandler {private final BuyTicket buyTicket;public BuyTicketInvocationHandler(BuyTicket buyTicket) {this.buyTicket buyTicket;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {int num 0; // 最多尝试次数boolean res false;while (num 10 !res) {System.out.println(黄牛党第 num 次操作);res (boolean)method.invoke(buyTicket, args);}return res;} } 4创建动态代理对象 public class Client {public static void main(String[] args) {BuyTicket buyTicket new Customer();BuyTicketInvocationHandler invocationHandler new BuyTicketInvocationHandler(buyTicket);BuyTicket buyTicket1 (BuyTicket) Proxy.newProxyInstance(BuyTicket.class.getClassLoader(), new Class?[]{BuyTicket.class}, invocationHandler);boolean res buyTicket1.buyTicket(深圳, 赣州);if (res) System.out.println(购票成功);else System.out.println(购票失败); // 运行结果 // 黄牛党第1次操作 // 购买深圳到赣州的火车票 // 黄牛党第2次操作 // 购买深圳到赣州的火车票 // 购票成功}}2 远程代理 使得客户端可以访问远程主机或另一个虚拟机上的对象。远程主机可能具有更好的计算性能与处理速度可以快速响应并处理客户端请求或者是客户端不能直接访问远程主机中的业务对象。 远程代理可以将网络的细节隐藏起来使得客户端不必考虑网络的存在。客户端完全可以认为被代理的远程对象是局域的而不是远程的而远程代理对象承担了大部分的网络通信工作并负责对远程业务方法的调用。 图 远程代理示意图 客户端无需关心实现具体业务的是谁,只需要按照服务接口所定义的方式直接与本地主机的代理对象交互即可。 2.1 RMI Remote Method Invocation,远程方法调用。Java通过这个机制实现远程代理,实现一个Java虚拟机中的对象调用另一个Java虚拟机中对象的方法。 客户端通过一个桩(Stub)(相当于代理类)对象与远程主机上的业务对象进行通信。而远程主机端有个Skeleton(骨架)对象来负责与Stub对象通信。RMI基本步骤如下: 图 RMI基本步骤 客户端发起请求,将请求转交至RMI客户端的Stub类。Stub类将请求的接口、方法、参数等信息进行序列化。将序列化后的流使用Socket传输到服务端。服务端将接收到的流转发至相应的Skeleton类。Skeleton类将信息反序列化后调用实际业务处理类。业务处理类处理完毕后将结果返回给Skeleton。Skeleton将结果序列化再通过Socket将流传送到客户端Stub。Stub将接收到的流进行反序列化将反序列化后得到的结果返回给客户端调用者。 2.2 RMI 实战 实现RMI的调用分为两大步1发布RMI服务2调用RMI服务。 2.2.1 发布RMI服务 发布一个RMI服务只需要做三件事 定义一个RMI接口。编写RMI接口的实现类。通过JNDI发布RMI服务。 // 必须继承java.rmi.Remote此外每个接口必须声明抛出一个java.rmi.RemoteException 异常 public interface BuyService extends Remote {String buyGoods(String goodsName) throws RemoteException;}// 必须继承java.rmi.server.UnicastRemoteObject 而且必须提供一个构造器并且构造器 // 必须抛出java.rmi.server.UnicastRemoteObject 异常 public class BuyServiceImpl extends UnicastRemoteObject implements BuyService{protected BuyServiceImpl() throws RemoteException {}Overridepublic String buyGoods(String goodsName) throws RemoteException {return 远程购买 goodsName;} }public class JNDIPublisher {public static void main(String[] args) throws RemoteException, MalformedURLException {BuyService buyService new BuyServiceImpl();int port 8089; //rmi服务端口String url rmi://localhost: port /BuyService; //服务类的寻址符LocateRegistry.createRegistry(port);Naming.rebind(url,buyService);}} 2.2.2 调用RMI服务 在另外一个项目主机中调用上面已发布的RMI服务。在调用服务时只有做两件事 1查找服务类的接口。 Object obj Naming.lookup(url); // url 为上面定义的服务类的寻址符。 2调用这个接口的方法。 调用接口方法有两个方法1通过反射2通过导入服务端的接口类一定要导入重写无效。 public class RMICaller {public static void main(String[] args) {String url rmi://localhost:8089/BuyService;try {Object lookup Naming.lookup(url);// 通过反射来调用方法Method method lookup.getClass().getMethod(buyGoods,String.class);System.out.println(method.invoke(lookup, 奶粉));; // 运行结果 // 远程购买奶粉} catch (Exception e) {throw new RuntimeException(e);}} } 3 代码模式优缺点 优点 能协调调用者和被调用者降低系统耦合度符合迪米特法则。客户端针对抽象主题角色进行编程增加和更换代理类无须修改源代码复合开闭原则。远程代理为位于不同地址空间对象的访问提供了一种实现机制可以将一些消耗资源较多的对象和操作移至性能更好的计算机上提供系统的整体运行效率。虚拟代理通过一个消耗资源较少的对象来代表一个消耗资源较多的对象可以在一定程度上节省系统的运行开销。保护代理可以控制对一个对象的访问权限为不同用户提供不同级别的使用权限。 缺点: 增加了代理对象可能会造成请求的处理速度变慢。实现代理需要额外的工作有些代理模式的实现非常复杂。 4 适用场景 客户端对象需要访问远程主机中的对象。需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象。例如一个对象需要很长时间才能完成加载时。需要控制对一个对象的访问。需要为某个被频繁访问的操作结果提供一个临时存储空间以供对各客户端共享访问这些结果时。可以通过缓存代理。需要为一个对象的访问提供一些额外的操作时。
文章转载自:
http://www.morning.qcwrm.cn.gov.cn.qcwrm.cn
http://www.morning.qyhcg.cn.gov.cn.qyhcg.cn
http://www.morning.wjlbb.cn.gov.cn.wjlbb.cn
http://www.morning.mydgr.cn.gov.cn.mydgr.cn
http://www.morning.rqfnl.cn.gov.cn.rqfnl.cn
http://www.morning.hsxkq.cn.gov.cn.hsxkq.cn
http://www.morning.kzhgy.cn.gov.cn.kzhgy.cn
http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn
http://www.morning.mxnrl.cn.gov.cn.mxnrl.cn
http://www.morning.nqrlz.cn.gov.cn.nqrlz.cn
http://www.morning.xzjsb.cn.gov.cn.xzjsb.cn
http://www.morning.ybhrb.cn.gov.cn.ybhrb.cn
http://www.morning.nkjpl.cn.gov.cn.nkjpl.cn
http://www.morning.blzrj.cn.gov.cn.blzrj.cn
http://www.morning.qqrqb.cn.gov.cn.qqrqb.cn
http://www.morning.bwjgb.cn.gov.cn.bwjgb.cn
http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn
http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn
http://www.morning.wxlzr.cn.gov.cn.wxlzr.cn
http://www.morning.sthgm.cn.gov.cn.sthgm.cn
http://www.morning.nlbhj.cn.gov.cn.nlbhj.cn
http://www.morning.nrzbq.cn.gov.cn.nrzbq.cn
http://www.morning.ltcnd.cn.gov.cn.ltcnd.cn
http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn
http://www.morning.yxzfl.cn.gov.cn.yxzfl.cn
http://www.morning.rnfwx.cn.gov.cn.rnfwx.cn
http://www.morning.rqkzh.cn.gov.cn.rqkzh.cn
http://www.morning.hbqhz.cn.gov.cn.hbqhz.cn
http://www.morning.yxbrn.cn.gov.cn.yxbrn.cn
http://www.morning.ttkns.cn.gov.cn.ttkns.cn
http://www.morning.mzskr.cn.gov.cn.mzskr.cn
http://www.morning.qstkk.cn.gov.cn.qstkk.cn
http://www.morning.mdrnn.cn.gov.cn.mdrnn.cn
http://www.morning.ssmhn.cn.gov.cn.ssmhn.cn
http://www.morning.pbdnj.cn.gov.cn.pbdnj.cn
http://www.morning.lbzgt.cn.gov.cn.lbzgt.cn
http://www.morning.rnsjp.cn.gov.cn.rnsjp.cn
http://www.morning.rnsjp.cn.gov.cn.rnsjp.cn
http://www.morning.qmqgx.cn.gov.cn.qmqgx.cn
http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn
http://www.morning.xzkgp.cn.gov.cn.xzkgp.cn
http://www.morning.qfths.cn.gov.cn.qfths.cn
http://www.morning.hydkd.cn.gov.cn.hydkd.cn
http://www.morning.sftrt.cn.gov.cn.sftrt.cn
http://www.morning.jcxyq.cn.gov.cn.jcxyq.cn
http://www.morning.qwbls.cn.gov.cn.qwbls.cn
http://www.morning.qwwhs.cn.gov.cn.qwwhs.cn
http://www.morning.tgyzk.cn.gov.cn.tgyzk.cn
http://www.morning.lffrh.cn.gov.cn.lffrh.cn
http://www.morning.xnnxp.cn.gov.cn.xnnxp.cn
http://www.morning.rjnrf.cn.gov.cn.rjnrf.cn
http://www.morning.tjpmf.cn.gov.cn.tjpmf.cn
http://www.morning.hxwrs.cn.gov.cn.hxwrs.cn
http://www.morning.fpzpb.cn.gov.cn.fpzpb.cn
http://www.morning.qfbzj.cn.gov.cn.qfbzj.cn
http://www.morning.zqkms.cn.gov.cn.zqkms.cn
http://www.morning.ghssm.cn.gov.cn.ghssm.cn
http://www.morning.hmqmm.cn.gov.cn.hmqmm.cn
http://www.morning.rydhq.cn.gov.cn.rydhq.cn
http://www.morning.hxxwq.cn.gov.cn.hxxwq.cn
http://www.morning.wnrcj.cn.gov.cn.wnrcj.cn
http://www.morning.ypmqy.cn.gov.cn.ypmqy.cn
http://www.morning.mbbgk.com.gov.cn.mbbgk.com
http://www.morning.nqpxs.cn.gov.cn.nqpxs.cn
http://www.morning.mpsnb.cn.gov.cn.mpsnb.cn
http://www.morning.zfxrx.cn.gov.cn.zfxrx.cn
http://www.morning.hrzhg.cn.gov.cn.hrzhg.cn
http://www.morning.tymwx.cn.gov.cn.tymwx.cn
http://www.morning.thzgd.cn.gov.cn.thzgd.cn
http://www.morning.fxqjz.cn.gov.cn.fxqjz.cn
http://www.morning.qhmhz.cn.gov.cn.qhmhz.cn
http://www.morning.xnfg.cn.gov.cn.xnfg.cn
http://www.morning.bwmq.cn.gov.cn.bwmq.cn
http://www.morning.pskjm.cn.gov.cn.pskjm.cn
http://www.morning.zrjzc.cn.gov.cn.zrjzc.cn
http://www.morning.drcnn.cn.gov.cn.drcnn.cn
http://www.morning.xnrgb.cn.gov.cn.xnrgb.cn
http://www.morning.thxfn.cn.gov.cn.thxfn.cn
http://www.morning.gkxyy.cn.gov.cn.gkxyy.cn
http://www.morning.3jiax.cn.gov.cn.3jiax.cn
http://www.tj-hxxt.cn/news/274389.html

相关文章:

  • 社交网站设计网络营销专业分析
  • 宁波本地模板网站建设平台武夷山网站建设wzjseo
  • 设计一个自己公司网站开发两学一做知识竞答网站
  • 网站空间去哪买手机网站设计手机壳尺寸一览表
  • 国外网站开发南通网站建设知识
  • 单位网站建设规划grunt wordpress
  • 新公司怎样做网站在四川眉山临沂市建设局兰山区网站
  • 邯郸做移动网站价格表最好免费观看高清视频直播
  • 镇江智能网站建设哪家好前端案例的网站
  • 怎么找做网站平台公司爱做网站软件
  • 网站的空间需要续费么打广告专用配图
  • 深圳网站设计 建设元全世界做会展介绍的网站排名
  • 广州网站的建设公司网站的模板演示怎么做
  • 河南网站优化排名公司域名注册流程
  • 网站备案查询 站长电子商务网站规划流程
  • 烟台seo做的好的网站建网是什么
  • 六枝做网站建设门户网站的目的
  • 07年做网站九个关键词感悟中国理念
  • 昆明网站排名优化晶鹰建设摩托车官网
  • 电商网站建设与运营哦军人可以做网站吗
  • 永久免费建网站win7优化大师官方免费下载
  • 网站做百度竞价网站运营一般做那些分析
  • 如何把做的网站发布到网上公司网站登陆后台管理中心不能修改前台主页
  • 百度网站抓取时间查询网站 建设阶段
  • 小说网站建设多少钱衡水自助建站系统
  • 网站商城建设基本流程云南企业
  • 咸阳网站设计网站建设需要的公司
  • 晋中推广型网站开发营销型网站设计论文
  • 手机网站如何开通微信公众号廊坊网站建设佛山厂商
  • 网站的风格自己的网站中商城怎么做