设计模式-单例模式


动机:对于一些类来说,只有一个实例是很重要的。
系统中可以有很多打印机,但却只应该又一个打印假脱机,只应又一个文件系统和一个窗口管理器。为了防止实例化多个对象,让这个类自身负责保存它的唯一实例,保证没有其他实例可以被创建(通过截取创建新对象的请求),并且它可以提供一个访问该实例的方法,这就是Singleton模式。

适用性:

  • 当类只能有一个实例且客户可以从一个众所周知的访问点访问它时
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无须更改代码就能使用一个扩展的实例时。

优点:

  • 对唯一实例的受控访问
  • 缩小名字空间(是对全局变量的一种改进)
  • 允许操作和表示的精华
  • 允许可变数目的实例
  • 比类操作更灵活

实现
饿汉式

public class singleton{
    public static void main(String[] args){
    
    }


}

class printerspooler{
    //私有化构造器
    private printerspooler(){
    
    }
    //内部创建类的对象,要求次对象必须声明为静态的
    private static printerspooler instance = new printerspooler();
    //提供公共的方法,返回类的对象
    public static printerspooler getInstance(){
        return instance;
    } 
    
}

懒汉式(线程不安全)

class Order{
    //私有化类的构造器
    private Orider(){
    
    }
    //声明当前类对象没有初始化,必须为static
    private static Order install = null;
    //声明public、static 返回当前类对象的方法
    public static Order getInstance(){
        if(instance == null){
            instance = new Order();
        }
        return instance;
    }

}

参考:设计模式-埃里克·伽马


Author: xt_xiong
转载要求: 如有转载请注明出处 :根据 CC BY 4.0 告知来自 xt_xiong !
评论
 上篇
抽象类与抽象方法 抽象类与抽象方法
有抽象方法的类,一定是抽象类;抽象类不一定有抽象方法 当子类继承抽象类时,必须要将抽象类中的抽象方法全部实现(或者称为重写),否则子类依然是抽象类 因为子类是继承父类全部内容,所以也就相当于子类中也有了抽象方法,通过重写,可以将抽象方法覆盖。
2022-11-06
下篇 
重载与重写 重载与重写
Overload是一个类中多态性的一种表现,Override是父类与子类之间的多态性,实质是对父类的函数进行重新定义...
2022-10-26
  标题