Java程序优化-设计优化

设计优化

1.单例模式

(1)对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级的对象而言,是非常可观的一笔系统消耗。

(2)由于new操作的次数减少,因而对系统内存的使用频率降低,这将减轻GC的压力。

2.代理模式

使用代理对象完成用户的请求,屏蔽用户对真实对象的访问,这里主要讨论使用代理模式实现延迟加载,从而提升系统的性能和反映速度。例如,使用代理类封装对数据库查询中的初始化操作,当系统启动时,初始化这个代理类,而非只是的数据库查询类,而代理类什么都没有做。

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

  • 动态代理

动态代理是指在运行时,动态的生成代理类,即,代理类的字节码将在运行时生成并载入当前的ClassLoader。

public interface Subject {
    public void doSomething();
}

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

public class ProxyHandler implements InvocationHandler {
    private Object proxied;

    public ProxyHandler(Object proxied) {
        this.proxied = proxied;
    }

    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        // 在转调具体目标对象之前,可以执行一些功能处理
        System.out.println(proxy.getClass().getName());
        System.out.println("Before invoke method...");
        // 转调具体目标对象的方法
        Object object = method.invoke(proxied, args);
        System.out.println("After invoke method...");

        return object;
    }
}

public static void main(String[] args) {
        RealSubject real = new RealSubject();
        Subject proxySubject = (Subject) Proxy.newProxyInstance(
                Subject.class.getClassLoader(), new Class[] { Subject.class },
                new ProxyHandler(real));
        proxySubject.doSomething();

    }

3.享元模式

如果在一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用都创建新的对象,在享元模式中,由于需要构造和维护这些可以共享的对象,常常会出现一个工厂类,用于维护和创建对象。

public class ReportManagerFactory{
    Map<String,IReportManager> reportManager=new HashMap<String,IReportManager>();

    IReportManager getReportManager(String id){
        IReportManager r=reportManager.get(id);
        if(r==null){
            r=new ReportManager(id);
            reportManager.put(id,r);
        }
        return r;    
    }
}

4.装饰者模式

装饰者模式拥有一个很巧妙的结构,可以动态添加对象功能。代码复用应该尽可能使用委托,而不是使用继承。装饰者模式充分运用了这种思想,通过委托机制,复用系统中的各个组件,在运行时,可以将这些功能进行叠加,从而构造一个超级对象。

在JDK中OutputStream和InputStream类族的实现是装饰者模式的典型应用,通过嵌套的方式不断的将对象聚合起来,最终形成一个超级对象,并使之拥有所有相关子对象的功能。其中FileOutputStream为系统的核心类,它实现了向文件写入数据。使用DataOutputStream可以在FileOutputStream的基础上,增加多种数据类型的写操作支持,而BufferedOutputStream装饰器,可以对FileOutputStream增加缓冲功能,优化I/O的性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值