1-单例模式

1、废话不多说,先上代码

  

2、什么是单例模式?

  单例模式就是保证系统中一个类只有一个实例,也就是说只能在类内部自己new自己产生唯一实例并对外提供

3、单例模式的实现

  三私一共:私有化存储对象的实例、私有化构造函数、私有化克隆函数,公开提供实例的方法

  ① 私有化一个静态属性用于存放唯一的实例

  ② 私有化构造方法、私有化克隆方法

  ③ 公有化静态方法,用于向系统提供这个实例

4、单例模式内属性和方法用private、static的原因

  private:

    属性:属性使用private可以防止在类外直接调用该属性,可能会对保存的对象实例进行修改,单例模式是要通过这个类获取唯一的实例。

    方法:私有化构造方法防止类外直接new类产生对象,私有化clone方法,防止clone对象,使用clone会自动调用__clone()方法,私有化

        的clone方法不可访问,故不能clone

        最后提供一个外部可访问的方法提供类的唯一实例,所以用public

  static:(参考 https://zhidao.baidu.com/question/2206072272164938188.html

    程序调用类中的方法只有两种方式,(1)创建类的一个对象,用该对象调用类种的方法(2)使用类名直接调用类中的方法,格式:类名::方法名()

    构造方法私有化后(1)不能用,只能用(2)。使用类名直接调用类种的方法,类中的方法必须是静态的,所以公开的提供实例的方法必须是静态的(static),

    而静态方法不能访问非静态成员变量,因此类自定义的实例变量也必须是静态的

5、应用场景举例

  ① 统计当前在线人数(网站计数器):用一个全局对象来记录

  ② 打印机(设备管理器):当有两台打印机,在输出同一个文件的时候只一台打印机进行输出

  ③ 数据库连接池(控制资源):一般是采用单例模式,因为数据库连接是一种连接数据库资源,不宜频繁创建和销毁。(数据库软件系统中使用数据库连接池,主

    要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率的损耗还是非常昂贵的,因此采用单例模式来维护就可以大大降低这种损耗

  ④ 应用程序的日志(资源共享):一般日志内容是共享操作,需要在后面不断写入内容,所以通常使用单例模式

6、单例模式的优缺点

  优点:① 减少内存开销,尤其是频繁的创建和销毁实例

             ② 避免对资源过多的占用

  缺点:① 没有抽象层,不能继承,扩展很难 

        ② 违背了“单一职责原则”,一个类只重视内部关系而忽略外部关系

      ③ 不适用于变化的对象

      ④ 滥用单例会出现一些负面问题,如为节省资源将数据库连接池对象设计为单例,可能会导致共享连接池对象对程序过多而出现连接池溢出。如果实例化对象长时间不被利用

      系统会认为是垃圾而被回收,这样将导致对象状态丢失

猜你喜欢

转载自www.cnblogs.com/lisongwei/p/10988745.html