`
songkewei110
  • 浏览: 40835 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JDK源代码中的Singleton模式

阅读更多
    在jdk源代码中存在着很多的设计模式,在这里找出jdk源代码中设计模式存在的形式,便于自己学习,也希望对别人有些帮助,希望大家指点:
    1.Singleton模式以下的jdk源代码中存在:
    A.java.lang.Runtime]类,是一个单例类,通过预加载产生Runtime实例: private static Runtime currentRuntime = new Runtime();通过getRuntime方法取得单例类:
    public static Runtime getRuntime() {
    return currentRuntime;
     }
    B.java.awt.Desktop#getDesktop()
    public static synchronized Desktop getDesktop(){
        if (GraphicsEnvironment.isHeadless()) throw new HeadlessException();
        if (!Desktop.isDesktopSupported()) {
            throw new UnsupportedOperationException("Desktop API is not " +
                                           "supported on the current platform");
        }

        sun.awt.AppContext context = sun.awt.AppContext.getAppContext();
        Desktop desktop = (Desktop)context.get(Desktop.class);

        if (desktop == null) {
            desktop = new Desktop();
            context.put(Desktop.class, desktop);

        }
       
        return desktop;
    }
    C.java.awt.Toolkit#getDefaultToolkit()
    public static synchronized Toolkit getDefaultToolkit() {
        if (toolkit == null) {
            try {
                // We disable the JIT during toolkit initialization.  This
                // tends to touch lots of classes that aren't needed again
                // later and therefore JITing is counter-productiive.
                java.lang.Compiler.disable();
               
                java.security.AccessController.doPrivileged(
                        new java.security.PrivilegedAction() {
                    public Object run() {
                        String nm = null;
                        Class cls = null;
                        try
                nm = System.getProperty("awt.toolkit", "sun.awt.X11.XToolkit");
                            try {
                                cls = Class.forName(nm);
                            } catch (ClassNotFoundException e) {
                ClassLoader cl = ClassLoader.getSystemClassLoader();
                                if (cl != null) {
                                    try {
                                        cls = cl.loadClass(nm);
                                    } catch (ClassNotFoundException ee) {
                                        if (GraphicsEnvironment.isHeadless()) {
                                            nm = "sun.awt.HToolkit";
                                            try {
                                                cls = Class.forName(nm);
                                            } catch (ClassNotFoundException xe) {
                                                try {
                                                    cls = cl.loadClass(nm);
                                         } catch (ClassNotFoundException xee) {
                                   throw new AWTError("Toolkit not found: " + nm);
                                                }
                                            }
                                        }
                                        else
                           throw new AWTError("Toolkit not found: " + nm);
                                    }
                                }
                            }
                            if (cls != null) {
                                toolkit = (Toolkit)cls.newInstance();
                                if (GraphicsEnvironment.isHeadless()) {
                                    toolkit = new HeadlessToolkit(toolkit);
                                }
                            }
                        } catch (InstantiationException e) {
                       throw new AWTError("Could not instantiate Toolkit: " + nm);
                        } catch (IllegalAccessException e) {
                            throw new AWTError("Could not access Toolkit: " + nm);
                        }
                        return null;
                    }
                });
                loadAssistiveTechnologies();
            } finally {
                // Make sure to always re-enable the JIT.
                java.lang.Compiler.enable();
            }
        }
        return toolkit;
    }
    D.java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()
        public static synchronized GraphicsEnvironment getLocalGraphicsEnvironment() {
if (localEnv == null) {
    String nm = (String) java.security.AccessController.doPrivileged
(new sun.security.action.GetPropertyAction
("java.awt.graphicsenv", null));

     try {// long t0 = System.currentTimeMillis();
             localEnv = (GraphicsEnvironment) Class.forName(nm).newInstance();
             // long t1 = System.currentTimeMillis();
             //System.out.println("GE creation took " + (t1-t0)+ "ms.");
                if (isHeadless()) {
                    localEnv = new HeadlessGraphicsEnvironment(localEnv);
                }
    } catch (ClassNotFoundException e) {
                throw new Error("Could not find class: "+nm);
            } catch (InstantiationException e) {
        throw new Error("Could not instantiate Graphics Environment: "+ nm);
            } catch (IllegalAccessException e) {
                throw new Error ("Could not access Graphics Environment: "+ nm);
            }
        }

return localEnv;
    }

   

 

分享到:
评论

相关推荐

    Head First设计模式 Java源代码

    Java源代码是书中理论知识的具体实现,通过实际编程加深对设计模式的理解至关重要。 1. **单例模式** (Singleton): 这是一种限制类实例化次数为一个的模式,常用于全局访问点,例如配置管理或线程池。Java中常见的...

    jdk-1.8 64位

    有了64位JDK,开发者可以使用各种IDE(如Eclipse、IntelliJ IDEA或NetBeans)来编写Java代码,然后利用JDK提供的`javac`编译器将源代码编译成字节码。`java`命令则用于运行已编译的类文件。此外,JDK还包含了诸如`...

    面向对象初学者必须掌握的几种设计模式

    观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量...

    “The Design Patterns Java Companion"书和源代码

    这些设计模式都是软件开发中的宝贵财富,它们提供了解决特定问题的标准方案,帮助我们编写出更清晰、更易于维护的代码。《设计模式:Java伴侣》这本书结合实际案例,不仅讲解了这些模式的概念,还提供了相应的Java...

    Java 1.8源码 jdk8u144源码

    这些源代码包含了Java开发工具包(JDK)中的所有核心类库,如集合框架、I/O流、多线程、网络编程、反射机制以及新的特性,比如Lambda表达式和Stream API。下面我们将详细探讨一些重要的知识点。 1. **Lambda表达式*...

    java范例开发大全源代码

     实例156 Singleton单例模式 242  实例157 招聘(简单工厂模式) 243  实例158 同学聚会(工厂方法模式) 244  实例159 图书展(抽象工厂模式) 246  实例160 汽车适配器(Adapter适配器模式) 248 ...

    Java6JDK1.6新特性总结大全附代码.docx

    - **概述**:Compiler API(JSR 199)允许在运行时动态编译Java源代码。这对于需要在运行时动态生成代码的应用非常有用,例如JSP Web服务器。 - **主要特点**: - 动态编译源代码。 - 可以结合反射机制使用。 - ...

    Java EE设计模式:Spring企业级开发最佳实践_JavaEE_企业应用开发_

    5. **装饰器模式(Decorator)**:Spring的AOP可以通过装饰器模式添加额外的行为到现有的对象,而无需修改其源代码。 6. **模板方法模式(Template Method)**:Spring的RestTemplate和JdbcTemplate等模板类,提供...

    设计模式java源码-JavaDesignPatterns:图书Java设计模式源代码

    在Java中,静态代理和动态代理(JDK Proxy或CGLIB)都可以实现这一模式。 九、桥接模式(Bridge) 桥接模式将抽象部分与它的实现部分分离,使它们可以独立地变化。在Java中,这可以用来解耦抽象和实现,例如在图形...

    设计模式面试题

    说出在标准JDK中使用的一些设计模式。** - **装饰器模式**:在Java I/O库中,如`BufferedReader`和`BufferedWriter`。 - **单例模式**:`java.util.Calendar`类中的实现。 - **工厂模式**:在`java.lang.Class`类...

    设计模式java版.rar

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的模板,可以被重复...通过阅读提供的英文原版资料和实际的源代码示例,你可以更深入地理解这些模式的原理和应用场景,从而在实际项目中灵活运用。

    Eystem_zljdb.zip

    4. **单例模式(Singleton Pattern)**:这是一种设计模式,保证一个类只有一个实例,并提供全局访问点。在员工管理系统中,单例模式可能被用来创建数据库连接池或者全局配置类,确保在整个系统运行过程中只有一个...

    java代码-考试内容1-单例模式

    在压缩包文件中,`main.java`很可能是实现单例模式的源代码,而`README.txt`可能是对代码的解释或使用说明。查看这两个文件的具体内容可以帮助我们更深入地理解这个单例模式的实现方式和应用场景。

    Fudan Univ-Object Oriented Design Lecture Notes

    - **教学资源**:提供了丰富的在线资源,包括JDK、源代码、课件和参考答案等。 - **考核方式**:成绩构成包括出勤率(10%)、作业(30%)和闭卷考试(60%)。 #### 总结 面向对象设计是现代软件工程中不可或缺的一部分,...

    五子棋 - Java实现

    这款游戏的主要特点包括操作简单、界面设计精美,并且源代码中包含详尽的注释,方便其他开发者学习和参考。 在Java编程中,实现五子棋游戏涉及多个知识点: 1. **图形用户界面(GUI)**:游戏界面通常采用Java ...

    Java面试宝典升级补充版.pdf

    3. **`javadoc`**: `javadoc` 工具用于根据Java源代码中的注释生成HTML格式的文档,方便其他开发者阅读和理解代码的功能和用途。 - **常用命令行参数**: - `-overview <文件>`: 指定一个HTML文件作为概述文档。 ...

    astparser:ASTParser是为了理解Java AST的结构而编写的

    ASTParser是Java SDK中的一个关键工具,用于解析源代码并生成这种表示形式,它使得开发者可以对源代码进行深度分析、转换和操作。ASTParser的主要目标是帮助理解Java程序的结构,并为诸如代码分析、重构和生成等任务...

    explorejdk8:JDK 8 新特性的示例代码

    在Java世界中,JDK 8是一个里程碑式的版本,它引入了许多创新特性和改进,显著提升了开发效率和代码质量。让我们深入探讨一下JDK 8的一些核心新特性,并通过具体的示例代码来理解它们。 1. **lambda表达式**: ...

    design-patterns:用Java编写的一组简单的设计模式示例

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题。...通过阅读和学习这个项目的源代码,开发者可以深入理解这些设计模式的实际应用,并将其运用到自己的项目中,提升软件的质量和可维护性。

Global site tag (gtag.js) - Google Analytics