单例模式是最容易理解的设计模式之一,介绍Java中单例模式的四种写法。
设计模式:单例设计模式
解决一个类中只允许存在一个对象这种情况;
不允许通过类,无限制的创建该类的对象。
怎样实现单例模式?
构造函数私有化(private);
在当前类的内部,写一个方法创建出该类的对象;
对外提供公共的访问接口;
类:类可以被继承,但是只能单继承,可以扩展一下通过串联继承的方式实现类似的多继承,
或者同过实现多接口的方式,实现继承中的多继承;
这种实现方式有一定的局限性 或者 缺点?
可也使用内部类来完善这种关系:
简单理解:就是在一个类的内部 又定义了一个类;
通过内部类 来完善java中的单继承;
Eg:人类: 由各个部分组成,
例如:心脏 (血液循环,跳动),心脏又在人体中,如同内部类在外部类中;
内部类需要掌握的知识点:
- 内部类的结构
- 内部类中变量的访问形式
- 静态内部类
- 私有内部类
- 方法内部类
总结:
使用内部类还能够为我们带来如下特性:
1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
3、创建内部类对象的时刻并不依赖于外围类对象的创建。
4、内部类并没有赋值关联关系,他就是一个独立的实体。
5、内部类提供了更好的封装,除了该外围类,其他类都不能访问
6、内部类使得多重继承的解决方案变得更加完整。
Eg: Sums 子类
public class Test_07 {
public static void main(String[] args) {
}
}
class SingleTon3{
private SingleTon3(){
}
//定义一个私有内部类
private static class Inner{
//创建 外部类对象的方法
private static SingleTon3 intace = new SingleTon3();
}
//写一个方法 提供 内部类的 属性值;
public static SingleTon3 getInstance(){
SingleTon3 singEomeEnt = Inner.intace;
return singEomeEnt;
}
}
// 线程安全模式:
class SingleTon2{
private static SingleTon2 instance;
//私有化构造函数
private SingleTon2(){
}
//写一个方法 提供 当前类对象:synchronized 程序锁
public static synchronized SingleTon2 getInstance(){
//判断当前对象是否 有效
if (instance == null) {
instance = new SingleTon2();
}
return instance;
}
}
/**
* 单例模式的实现方式:饿汉模式
* 提前进行实例化操作,没有延迟加载,不管是否 会使用都会 初始化一个 到内存中去
* @author direct
*
*/
class SingleTon{
//构造 函数私有化
private SingleTon(){
}
//创建对象 :不能被外部 直接创建的方法
private static SingleTon getSingle(){
return new SingleTon();
}
//提供一个公共的方法 返回该队形
public static SingleTon showSing(){
return getSingle();
}