服务粉丝

我们一直在努力
当前位置:首页 > 科技 >

虚拟代理模式-Virtual Proxy(Java实现)

日期: 来源:JAVA小生收集编辑:老板

虚拟代理模式-Virtual Proxy

虚拟代理模式(Virtual PRoxy)会推迟真正所需对象实例化时间. 在需要真正的对象工作之前, 如果代理对象能够处理, 那么暂时不需要真正对象来出手.

优点: 这种方法的优点是,在应用程序启动时,由于不需要创建和装载所有的对象,因此加速了应用程序的启动。

缺点: 因为不能保证特定的应用程序对象被创建,在访问这个对象的任何地方,都需要检测确认它不是空(null)。性能的降低上不仅仅是多了一句代码这么简单, ` if ` 这种跳转类语句的很有可能会阻塞CPU的指令流水, 虽然有分值预测技术, 但是分支预测也是有命中率的....

还是回过头讲讲本文的主题吧....

举个例子: 有一批人来找老板谈事情, 谈事情之前需要预约, 将这些预约添加到计划列表里. "将预约添加到计划列表里"这件事, 本身并不需要老板亲自现身, 老板不再的时候完全可以找一个助手来代做, 只有执行任务计划列表里的任务时, 老板才需现身处理(场景就是: 大家都是来找老板做事的, 并不是来找助手做事的, 助手只负责在老板不在的时候帮老板收集大家的需求, 最后收集完了, 他就把老板邀请过来, 老板来处理所有的事情).Approvable接口

老板和助手都需要实现这个接口.

助手实现这个接口, 当调用助手的approve方法时, 助手就会去邀请老板过来, 让老板处理清单.

老板实现这个接口, 是因为这些清单就需要老板来处理(approve)

public interface Approvable {

void approve() ;

}Boss类

老板是有身价的, 来一趟不容易, 所以小事交给助手做(就比如: 收集访客们找老板有什么事情, 并统计出一个清单). 没必要一上来就把老板叫出来.

import java.util.LinkedList;

import java.util.List;

public class Boss implements Approvable {

List

orders;

{

System.out.println("nBoss出现...n");

}

public Boss() {

this.orders = new LinkedList<>();

}

public Boss(List

orders) {

if (orders != null) {

this.orders = orders;

} else {

this.orders = new LinkedList

0){

String order = orders.remove(0);

System.out.println("Boss处理了任务

");

}

System.out.println();

}

}Assistant类

Boss的代理类, 老板的助手.

import java.util.LinkedList;

import java.util.List;

/**

* Boss的代理

* 负责收集orders列表, 处理清单之前的收集工作就不用老板现身了,

* 老板可以晚一点出现

*/

public class Assistant implements Approvable {

List

orders;

volatile Boss boss;

public Assistant() {

orders = new LinkedList<>();

}

public void addOrder(String order) {

if (boss != null) {

System.out.println("Boss亲自将

任务添加到列表");

boss.addOrder(order);

} else {

System.out.println("助手将

任务添加到列表");

this.orders.add(order);

}

}

@Override

public void approve() {

inviteBoss();

boss.approve();

}

private void inviteBoss() {

if (boss == null) {

synchronized (this) {

if (boss == null) {

boss = new Boss(orders);

}

}

}

}

}Main

用于运行, 场景模拟

public class Main {

public static void main(String[] args) {

// 有很多人来找老板, 老板在忙, 助手先把所有事情安置好

Assistant assistant = new Assistant();

assistant.addOrder("我找Boss面试");

assistant.addOrder("我找Boss借钱");

assistant.addOrder("我找Boss聊天");

// 收集好了, 助手的职责就完成了, 把Boss叫出来, 让Boss处理. 或者说approve这件事,助手是做不了的, 只能叫出Boss来做.

assistant.approve();

// Boss刚才就被邀请过来, 现在就在现场. 所以就不需要助手转告给Boss了. 大家告诉助手的事情, Boss也会听到

assistant.addOrder("我找Boss吃饭");

assistant.addOrder("我找Boss喝酒");

assistant.approve();

}

}

相关阅读

  • 天气晴朗 家家户户阳台晒肉忙

  • 这些天天气晴朗,许多家庭趁着大太阳把为过年准备的酱鸭、腌鱼、腌鸡等都拿出来晒晒,力求让这些肉制品在阳光的作用下蜕变出更诱人的美味。说起钱塘人的年味,可以说是从一只酱鸭
  • 上海一网吧搞促销,需要签订“生死状”

  • 还有不到十天,就到小年了。全国各地的“烟火气”逐渐回归,在餐饮、旅游、娱乐等行业,商家纷纷开启春节模式。但在上海一网吧,春节促销却推出了“生死状”。这是什么情况?春节促销
  • 三亚旅游爆火!有民宿老板1个月抹平3年亏损

  • 1月5日,携程发布《2023年春节旅游市场预测报告》显示,国内多个度假目的地在春节预订热潮中。从截至目前的订单总量来看上海、北京、三亚、广州、成都、深圳、昆明、杭州、重庆

热门文章

  • OPPO k1的低价高配真实么?网友:不看不知道

  • 近日OPPO一款新机OPPO k1,摒弃了高价低配,就连自家老大哥r17都要怼一下。更是放弃了请代言人,以往的OPPO手机还没出来,各路流量小生,花样美男的代言就先来了。还有线下销售人员的
  • 一招教你手机无限制成为一台新设备

  • 大家平时用手机去注册app,肯定会遇到检测设备异常,交易关闭,等问题 这个都是手机已经不止1-2次注册过此app,不断更换手机仅是一个暂时的方法,却不是长久之计,手机总归会用完
  • 从零开始如何开网店

  • 随着互联网的高速发展,人们的生活发生了翻天覆地的变化,生活节奏越来越快,网购已经成为家家户户生活中离不开的一种购物方式了。网购的发展使得越来越多的人想要涉足电商事业,那

最新文章

  • 河南周口:去年11月份空气质量全省第一

  • 周口日报全媒体记者 付永奇近日,河南省生态环境厅公布全省2022年11月份环境空气质量排名情况,周口市位居省辖市第一名。环境空气质量标准是以保障人体健康和生态环境为目标,对
  • 德州税务推出优化营商环境二十条便民利企措施

  • 为进一步优化税收营商环境,更好激发企业发展活力,提振市场主体信心,推动全市经济高质量发展,近日,国家税务总局德州市税务局推出优化营商环境二十条便民利企措施。 税收政策
  • 东港区后村镇:“大棚经济”促农致富

  •   近日,东港区后村镇后马庄二村蔬菜大棚中,螺丝椒喜获丰收。   走进大棚,一株株翠绿的辣椒长势旺盛,一串串青椒挂满枝头,村民们穿梭其间,采摘、装袋、运输,处处一片繁忙景象
  • 特高压换流变压器火灾扑救技术

  • 针对特高压换流变压器电压等级高、能量大、结构特殊、火灾工况复杂、扑救难度大、缺乏科学技战术的难题,天津消防研究所分析阐明了特高压换流变压器结构特征与火灾事故特点,研