java设计模式进阶_lazy-loading

来源:互联网 发布:梅花魂优化答案 编辑:程序博客网 时间:2024/05/19 22:59

这里写图片描述

package com.think.in.java.design.pattern.lesson28;//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : Heavy.java//  @ Date : 2016/9/1//  @ Author : ////public class Heavy {    public Heavy()    {        System.out.println("Creating Heavy ...");        try {            Thread.sleep(1000);        } catch (InterruptedException e) {            e.printStackTrace();        }        System.out.println("... Heavy created");    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : HolderNaive.java//  @ Date : 2016/9/1//  @ Author : ////public class HolderNaive {    private Heavy heavy;    public HolderNaive(){        System.out.println("HolderNaive created");    }    public Heavy getHeavy() {        if(heavy == null)            heavy = new Heavy();        return heavy;    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : HolderThreadSafe.java//  @ Date : 2016/9/1//  @ Author : ////public class HolderThreadSafe {    private Heavy heavy;    public HolderThreadSafe() {        System.out.println("HolderThreadSafe created");    }    public synchronized Heavy getHeavy() {        if(heavy == null)        {            heavy = new Heavy();        }        return heavy;    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : JavaHolder.java//  @ Date : 2016/9/1//  @ Author : ////public class JavaHolder  {    private Supplier<Heavy> heavy = null;    public JavaHolder()    {        System.out.println("JavaHolder created");    }    public Heavy getHeavy(){        return createAndCacheHeavy();    }    @SuppressWarnings("unused")    private synchronized Heavy createAndCacheHeavy(){        class HeavyFactory implements Supplier<Heavy>        {            private final Heavy heavyInstance = new Heavy();            @Override            public Heavy get() {                return heavyInstance;            }        }        if(!HeavyFactory.class.isInstance(heavy)){            heavy = new HeavyFactory();        }        return heavy.get();    }}//////  Generated by StarUML(tm) Java Add-In////  @ Project : Untitled//  @ File Name : Supplier.java//  @ Date : 2016/9/1//  @ Author : ////public interface Supplier<T> {    public T get();}public class App {    public static void main(String[] args) {        //Simple lazy loader - not thread safe        HolderNaive holderNaive = new HolderNaive();        Heavy heavy = holderNaive.getHeavy();        System.out.println("heavy=" + heavy);        //Thread safe lazy loader,but with heavy synchronization on each access        HolderThreadSafe holderThreadSafe = new HolderThreadSafe();        Heavy another = holderThreadSafe.getHeavy();        System.out.println("another=" + another);        //The most efficient lazy loader utilizing java feature        JavaHolder javaHolder = new JavaHolder();        Heavy next = javaHolder.getHeavy();        System.out.println("next=" + next);    }}/*HolderNaive createdCreating Heavy ...... Heavy createdheavy=com.think.in.java.design.pattern.lesson28.Heavy@173fa2d5HolderThreadSafe createdCreating Heavy ...... Heavy createdanother=com.think.in.java.design.pattern.lesson28.Heavy@1664978bJavaHolder createdCreating Heavy ...... Heavy creatednext=com.think.in.java.design.pattern.lesson28.Heavy@6fb829c7*/
0 0