Java研发工程师知识点总结

Java研发工程师知识点总结

 五分钟一个设计模式

工厂模式

1.单例模式

(1)单例模式是一个非常简单的设计模式,它的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点 
有些数据库操作类或者工具类会使用单例模式。

例如:对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;售票时,一共有100张票,可有有多个窗口同时售票,但需要保证不要超售(这里的票数余量就是单例,售票涉及到多线程)。如果不是用机制对窗口对象进行唯一化将弹出多个窗口,如果这些窗口显示的都是相同的内容,重复创建就会浪费资源。

(2)lazy initialization就是在使用的时候才进行初始化,与之对应的是在类加载的时候就初始化(即时加载)。二者的区别在于对象的生成时间不同;

public final class Singleton {
// private static Singleton st;//lazy initialization 类调用时才生成对象;
private static Singleton st = new Singleton();//即时加载 类加载时就生成对象;
    private Singleton() {// 构造私有
    }
    public static Singleton getInstance() {// 提供方法
    /*
    * if(st==null){ st =new Singleton(); }
    */
    return st;
    }
}
public class Singleton {
    //将构造函数声明为private,防止外界直接通过构造函数来创建对象,只能在类内部创建对象
    private Singleton()
    { }

    private static Singleton uniqueInstance;


    public static Singleton GetInstance(){
        synchronized (Singleton.class){
            //当需要创建对象时,调用私有的构造函数来创建
            //下次调用时,对象不为null,就直接返回对象实例了,
            //所以,uniqueInstance值会被实例化一次,
            //Singleton类也只有这么一个对象
            if (uniqueInstance == null)
                uniqueInstance = new Singleton();
            return uniqueInstance;
        }
    }

    public void DoSomething()
    {
        System.out.println("do something with unique instance");
    }
}

(3)一般来说,单例模式有五种写法:懒加载、急加载、双重检查加锁锁、静态内部类、枚举。一般情况下直接使用急加载,如果明确要求要懒加载(lazy initialization)会使用静态内部类;

//急加载 static final field 线程安全
public class Singleton{
    //类加载时就初始化
    private static final Singleton uniqueInstance = new Singleton();
    private Singleton(){}
    public static Singleton getInstance(){
        return uniqueInstance;
    }
}
//静态内部类 static nested class 线程安全
public class Singleton {  
    private static class SingletonHolder {  
        private static final Singleton uniqueInstance = new Singleton();  
    }  
    private Singleton (){}  
    public static final Singleton getInstance() {  
        return SingletonHolder.uniqueInstance; 
    }  
}
//枚举 Enum 线程安全
public enum EasySingleton{
    INSTANCE;
}

2.public/private/protected

(1)public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用

(2)private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。

(3)protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

猜你喜欢

转载自blog.csdn.net/a1032818891/article/details/81356888