zoukankan      html  css  js  c++  java
  • 单例模式--延时初始化

    单例模式特点:构造函数声明为private,对象获取通过函数调用。

    基本单例模式(饿汉模式):

    final class Singleton{
    private static Singleton s=new Singleton(47);
    private int i;
    private Singleton(int x){i=x;}

    public static Singleton getReference(){
    return s;
    }
    public int getValue(){return i;}
    public void setValue(int x){i=x;}
    }

    静态延时初始化(懒汉模式):
    final class StaticSingleton{
    private static StaticSingleton s;
    private int i;
    private StaticSingleton(int x){i=x;}

    public static StaticSingleton getReference(){
    if(s == null){
    s=new StaticSingleton(47);
    }
    return s;
    }

    public int getValue(){return i;}
    public void setValue(int x){i=x;}
    }
    类加载延时初始化:
    final class InnerSingleton{
    private static InnerSingleton s;
    private int i;
    private InnerSingleton(int x){i=x;}

    private static class SingletonHolder{
    static InnerSingleton instance =new InnerSingleton(47);
    }
    public static InnerSingleton getReference(){
    return SingletonHolder.instance;
    }

    public int getValue(){return i;}
    public void setValue(int x){i=x;}
    }
    查找注册方式:
    接口:
    public interface EmployeeManagement {
    static String name="";
    public void setName(String name);
    }
    单例模式类:
    final class Employee implements EmployeeManagement{
    static String name;
    private static Map<String,Employee> map = new HashMap<String,Employee>();
    static{
    Employee single = new Employee();
    map.put(single.getClass().getName(), single);
    }
    public void setName(String name){
    this.name=name;
    }
    protected Employee(){}
    protected Employee(String name){this.setName(name);}
    public static Employee getInstance(String name) {
    if(name == null) {
    name = Employee.class.getName();
    System.out.println("name == null"+"--->name="+name);
    }
    if(map.get(name) == null) {
    if(map.get(name) == null) {
    try {
    map.put(name, (Employee) Class.forName(name).newInstance());
    } catch (InstantiationException e) {
    e.printStackTrace();
    } catch (IllegalAccessException e) {
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
    }
    return map.get(name);
    }

    public void getInfo(){
    System.out.println(name+" is here .");
    }
    }
    应用实例:
    public class RegistryService {

    public static void main(String[] args) {
    Employee em=Employee.getInstance("singleton.Employee");
    em.setName("SuYU");
    em.getInfo();
    }
    }
    资源:
    https://share.weiyun.com/5kLvDQS
    https://share.weiyun.com/5LRwSxS
  • 相关阅读:
    php数组到json的转变
    微信小程序获取微信绑定的手机号
    微信小程序授权登录
    用海豚框架(DolphinPHP)实现单/多图片上传时,如何获得图片路径
    数据库索引-简单了解
    php将二维数组转换成我想要的一维数组
    php的八大数据类型
    单例模式
    Springboot配置Sqlserver
    WinForm 文件操作
  • 原文地址:https://www.cnblogs.com/ssMellon/p/6414810.html
Copyright © 2011-2022 走看看