javase知识点 ----23 (设计模式 单例模式(饿汉式 懒汉式 )工厂模式)

本文深入解析了单例模式和工厂模式两种经典的设计模式。单例模式确保类只有一个实例,并提供了全局访问点。工厂模式则通过创建对象而不暴露创建逻辑来封装对象的创建过程。文中详细解释了饿汉式和懒汉式单例模式的区别,以及如何通过工厂方法根据配置文件创建对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单例模式
  1、定义:单例模式指的是一个类只能有一个实例,这样的类被称为单例类,或者单态类,即Singleton Class
  2、特点:单例类只可有一个实例 ;它必须自己创立这唯一的一个实例 ;它必须给所有其它的类提供自己这一实例 。
  3、单例模式有两种常见的实现方式,被称为饿汉式与懒汉式
     饿汉式:加载类的时候就初始化一个实例。
     懒汉式:加载类的时候不初始化,当第一次使用实例时才初始化。
  4、步骤:
     1、构造方法是private权限,保证其他类无法创建该类实例,只能该类自身创建
     2、声明一个static修饰的自身实例,保证该实例永远只是一个
     3、提供一个public方法,返回定义的static自身实例

懒汉式

public class SingletonClass {
    //单例类只可有一个实例
    static SingletonClass instance = null;

    // 只有自己能调用,其它类无法调用
    private SingletonClass() {
    }

    //它必须给所有其它的类提供自己这一实例 
    public static SingletonClass getInstance() {
                if (instance==null) {
            instance = new SingletonClass();
        }
        return instance;
    }


饿汉式  

public class SingletonClass {
    //单例类只可有一个实例
    static SingletonClass instance = new SingletonClass();

    // 只有自己能调用,其它类无法调用
    private SingletonClass() {
    }

    //它必须给所有其它的类提供自己这一实例 
    public static SingletonClass getInstance() {         
        return instance;
    }
}

 
工厂模式
  1、编写一个工厂方法根据配置文件返回对应的对象。
       

  public static Object getInstance() throws Exception{
        //读取配置文件
        BufferedReader buf = new BufferedReader(new FileReader(new  File("info.txt")));
        //读取第一行,读取类的信息
        String className = buf.readLine();
        //获取Class类的实例
        Class clazz = Class.forName(className);
        //获取对应的构造方法
        Constructor constructor = clazz.getDeclaredConstructor(null);
        constructor.setAccessible(true);
        Object o = constructor.newInstance(null);
        
        String line = null;
        while((line = buf.readLine())!=null){
            String[] datas = line.split("=");  //读出的配置信息,用split分割成一个数组,0是属性名  1是属性值
            Field field =  clazz.getDeclaredField(datas[0]); 
            //可以访问
            field.setAccessible(true);
            if (field.getType()==int.class) {
                field.set(o, Integer.parseInt(datas[1]));
            }else{
                field.set(o, datas[1]);
            }
        }
        return o;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值