单例模式(Singleton)

来源:互联网 发布:平面效果图设计软件 编辑:程序博客网 时间:2024/05/16 17:30
单例模式(Singleton)


@@@模式定义:
保证一个类仅有一个实例,并提供一个访问它的全局访问点。


@@@练习示例:
读取配置文件的内容。


@@@示例代码:
src/tools/AppConfig.java

~~~~~~~~~~~~~~~~~~~~~~~~

package tools;import java.io.IOException;import java.io.InputStream;import java.util.Properties;/** *  * 读取应用配置文件 */public class AppConfig {/** * 定义一个变量来存储创建好的类实例,直接在这里创建类实例,只能创建一次 */private static AppConfig instance = new AppConfig();/** * 定义一个方法来为客户端提供AppConfig类的实例 * @return 一个AppConfig的实例 */public static AppConfig getInstance() {return instance;}    /**     * 用来存放配置文件中参数A的值     */private String parameterA;    /**     * 用来存放配置文件中参数B的值     */private String parameterB;public String getParameterA() {return parameterA;}public String getParameterB() {return parameterB;}/** * 私有化构造方法 */private AppConfig() {//调用读取配置文件的方法readConfig();}/** * 读取配置文件,把配置文件中的内容读出来设置到属性上 */private void readConfig() {Properties  p  = new Properties();InputStream in = null;try {in = AppConfig.class.getResourceAsStream("AppConfig.properties");p.load(in);//把配置文件中的内容读出来设置到属性上this.parameterA = p.getProperty("paramA");this.parameterB = p.getProperty("paramB");} catch (IOException e) {System.out.println("装载配置文件出错了,具体堆栈信息如下:");e.printStackTrace();} finally {try {in.close();} catch (IOException e) {e.printStackTrace();}}}}



src/tools/AppConfig.properties
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
paramA=a
paramB=b


src/user/Client.java
~~~~~~~~~~~~~~~~~~~~
package user;import tools.AppConfig;public class Client {public static void main(String[] args) {//创建读取应用配置的对象        AppConfig config = AppConfig.getInstance();                String paramA = config.getParameterA();        String paramB = config.getParameterB();                System.out.println("paramA=" + paramA + ", paramB=" + paramB);}}

@@@模式的实现:
1. 饿汉式,空间换时间,线程安全。
2. 懒汉式,时间换空间,不加同步则线程不安全。
3. 用枚举实现。


@@@模式的本质:
控制实例数目,节省系统资源。

原创粉丝点击