研磨设计模式day05单例模式

目录

思想

考虑四点

单例模式的调用顺序示意图

何时使用单例


思想

在系统运行期间,某个类只需要一个实例就可以了。

考虑四点

1.怎么控制实例的创建?   构造函数私有

2.私有后别人怎么访问该实例?且不创建实例的访问?public静态方法getInstance()

3.方法内部怎么实现呢?用属性来记录创建好的类实例,当第一次创建后,将这个实例保存下来进行复用。因为该方法是静态的,因此属性被迫成为类变量加上static

4.如何实现控制实例的创建?在静态方法里面判空  (懒汉式){进来不会创建,判空后才创建}

4.进来属性直接给它一个new 实例(),在静态方法中直接使用创建好的实例

package day04单例模式;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.Properties;

/**
 * 读取应用配置文件
 */
public class AppConfig implements Serializable {

    /**
     * 1.定义一个变量来存储创建好的类实例,直接在这里创建类实例,只能创建一次 (饿汉式)
     * 2.提供供外部访问内部实例的方法
     * 3.私有化构造方法
     */
    private static AppConfig instance = new AppConfig();

    /**
     * 提供 供外部访问内部实例的方法
     * 静态方法,是使用static关键字修饰的方法,又叫类方法。
     * 属于类的,不属于对象,在实例化对象之前就可以通过类名.方法名调用静态方法。
     */
    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();
            }
        }
    }
}

client

package day04单例模式;

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

单例模式的调用顺序示意图

何时使用单例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值