深刻理解代理模式在java中如何优化系统性能

最近参与实习公司的项目迭代,项目中需要实现系统的快速响应和大量数据处理。在不断的学习中获得一点儿心得,先记录下来。慢慢的修改!

关于代理模式的知识和简单应用之前的学习笔记中已经有记录了,可以复习一下。这里主要记录如何使用代理模式来实现延迟加载,进而提升系统系能和反应速度。

使用代理模式实现延迟加载的一个简单实例:

需求:项目中对系统的启动速度做了一定的要求

我们在系统首次加载时,因为不需要实际的数据来构造显示界面,这就为我们实现系统首次加载的快速响应提供了可能。在常规模式下,我们一般会在系统启动时就开始初始化所有的类,如果这时系统中很多类设计到获得数据库连接(比如初始化连接池)或者是类似的操作(比如XML解析),所有这些操作叠加在一起,就会拖慢系统的启动速度。这时我们可以考虑使用代理模式,使用代理类,封装一些初始化操作(比如数据库连接池的构建),以数据库为例:使用代理类封装对数据库查询中的初始化操作,当系统启动时,初始化这个代理类,而非真是的数据库查询类。而代理类什么都没有做,这样构造的速度就获得了提升。

记住这一原则:将消耗资源最多的方法都使用代理模式分离出来(如果可以的话);等到用户真正在使用的时候在由代理类单独去加载真实类,完成用户的请求,因为不是所有的真实类都可能被用户使用到。

延迟加载的核心思想:如果当前并没有使用这个组件,则不需要真正地初始化它,使用一个代理对象代替他的原有位置,直到真正需要使用的时候才对他进行加载。

代理模式的实现:

public class RealSubject implements Subject{
    public RealSubject(){
        try{
            Thread.sleep(1000);  // 模拟系统启动时的时耗
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public void doSomething(){
        // ...
    }
}

// 代理类是轻量级的对象,创建很快
public calss SubjectProxy implements Subject{
    private RealSubject real = null;

    public void doSomething(){
        // 在真正使用组件的时候,才创建真实的对象
        if(real == null)
            real = new Sunbject();
        return real.doSomething();
    }
}
时间: 2024-10-21 00:39:54

深刻理解代理模式在java中如何优化系统性能的相关文章

浅谈代理 模式与java中的动态代理

代理模式的定义: 代理模式是一个使用律非常高的模式,定义如下: 为其他对象提供一种代理,以控制对这个对象的访问. 类图: 简单的静态代理: public interface IRunner{ //这是一个代理类和被代理类都需要实现的接口 //在接口中定义一个抽象函数 public void request(); } //下面是真实的被代理类 public class Runner implements IRunner{ //实现接口中的方法 public void request(){ //实现

DRP总结—在实践中理解代理模式

前言 在JDBC访问数据库时,增删改的方法可谓都要进行手动事务处理,所以在每一个方法执行的时候,就都要写事务处理的代码.当敲起代码来不舒服的时候,我们就要想想面向对象的思想,这么多次重复写相同的代码是不对的,所以就要进行抽象和封装,于是就有了设计模式. 代理模式 代理模式(Proxy):为其他对象提供一种代理,以控制对这个对象的访问.举一个生活中的例子,如果我们买什么东西,我们并不会去工厂直接购买,而是去商场进行选购,这时的商场也就是工厂的代理类.在类的单一职责原则中,一个类应该只做一件事,所以

Objective-C:模拟按钮点击事件理解代理模式

OC中的协议(Protocol)和和.NET中的接口(Interface)类似,简单来讲,就是一系列方法的列表,其中声明的方法可以被任何类实现.不同的是,在.NET中,如果某个类实现了一个接口,就必须实现这个接口中声明的所有方法:但在OC中,可以不实现协议中声明的所有方法,需要用到某些功能,就去实现对应的方法即可. 这种模式一般称为代理模式.在iOS和OS X开发中,Apple采用了大量的代理模式来实现MVC中View(UI控件)和Controller(控制器)的解耦. 监听思想:如果想让某个对

代理模式和java动态代理

代理模式的作用及使用场景 使用代理模式的根本目的在于:如何在不直接操作对象的情况下,对此对象进行访问? 常用的场合包括:1)延迟加载:2)在调用实际对象的方法前后加入某些业务逻辑(作用有点像spring的AOP) 类结构: JAVA动态代理 JAVA提供了动态代理类以供用户方便地实现代理模式 public interface Subject { public void doRequest(); } public class SubjectImpl implements Subject { pub

设计模式之代理模式(Java)

简介 代理模式出场率真的相当的高,几乎所有框架中无一例外都用到了代理模式,所以了解一下收益还是很高的. 代理模式是什么 如果用一句话来描述代理模式: 代理模式就是为其他对象提供一种代理以控制对被代理对象的访问,也就是我们常说的中介 在开发以及生活中经常听到正向代理,反向代理这样的词,举例说明 正向代理 由于网络原因我们访问不了谷歌,这时候我们就需要找个梯子,替我们去访问谷歌,并且把我们需要的信息返回,这个梯子代理 反向代理 作为服务端为了安全,我们不想把实际服务器的信息暴露出去,已防止不法分子的

代理模式在android中使用

代理模式(Proxy): 代理设计模式是对象的结构模式,原理就是给某个对象提供一个代理对象,并由代理对象来控制对愿对象的引用.在有些情况下,一方不能或不想直接引用一个对象,而代理对象可以在双方之间起到中介的作用,这样可以大大降低彼此的耦合关系,提高彼此的灵活性.下面为代理模式的简略结构类图: 代理模式的角色有三个,分别为:抽象角色.代理角色以及具体角色.具体如下: 抽象角色:声明了代理角色和具体角色的共用接口,促使可以使用具体实角色的地方都可使用代理角色. 具体角色:定义代理角色所要代表的具体角

【计算机网络】关于三种网络通信模式以及java中三种通信方式的实现介绍

当前的网络中有三种通讯模式:单播.广播.组播(多播),其中的组播出现时间最晚但同时具备单播和广播的优点,最具有发展前景. 一.单播: 主机之间"一对一"的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制.如果10个客户机需要相同的数据,则服务器需要逐一传送,重复10次相同的工作.但由于其能够针对每个客户的及时响应,所以现在的网页浏览全部都是采用IP单播协议.网络中的路由器和交换机根据其目标地址选择传输路径,将IP单播数据传送到其指定的目的地. 单播的优点: 1.  服务器及时

Java中性能优化的45个细节

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1. 尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控制资源的使用,通过线程同步来控制资源的并发访问: 控制实例的产生,以达到节约资源的目的: 控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信. 2. 尽量避免随意使用静态变量 当某个

ios 深刻理解MVC模式—代理方法

在oc中MVC模式得到广泛应用,所谓MVC,即模型Model,视图View,控制器Controller 控制器通过模型数据控制视图,而代理方法则是控制器控制视图的所使用的方法. 使用代理所需要满足的条件: 1.代理协议:里面声明了代理方法 2.视图View定义满足代理协议的代理属性,例如 @property(nonatomic,weak)id<UITableViewDelegate>delegate; 3.给View提供一个或几个方法,方法内View的代理view.delegate 调用它的代