zoukankan      html  css  js  c++  java
  • 构造私有化和单例设计模式

    以下的代码对构造方法进行了私有化封装,但这样封装后我们在类外需要实例化对象是会出现错误,因为构造方法是私有的,所以无法实例化。

    1 class Singleton{
    2     private Singleton() {}
    3     public void print() {
    4         System.out.println("hello world");
    5     }

    既然在外部不能实例化对象,我们可以在类的内部实例化对象。

     1 class Singleton {
     2 // 在类的内部进行实例化对象
     3     private static Singleton instance = new Singleton();
     4 // 获得instance属性
     5     public static Singleton getInstance() { 
     6         return instance;
     7     }
     8     private Singleton() {} // 对构造函数进行了私有化封装
     9 
    10     public void print() {
    11         System.out.println("hello world");
    12     }
    13 }

    也因为外部不能实例化对象,我们如果要使用instance属性,就应该把它定义为static类型,此时我们就可以在外部调用getInstance()方法来实例化Singleton类型对象了。但这样做有什么用了,但我们实例化多个Singleton对象时,可以看到,s1s2s3其实指向的是同一个Singleton对象。

    1 public class DataTest {
    2     public static void main(String args[]) {
    3         Singleton s1 = Singleton.getInstance();
    4         Singleton s2 = Singleton.getInstance();
    5         Singleton s3 = Singleton.getInstance();
    6     }
    7 }

    也就是说不管外部声明了多少个Singleton对象,最终结果都是通过调用getInstance()方法取得的实例化对象,即s1s2s3实际上都使用了一个对象的引用:instance

    那么这样的设计在设计模式上来讲叫做单例设计模式(单态设计模式)。

    单例设计模式的核心是将类的构造方法私有化,之后在类的内部产生实例化对象,并通过类的静态方法返回实例化对象的引用。

    如果现在不希望一个类产生过多的对象时,就可以采用单例设计模式。这在Java支持的类库中会经常用到。

  • 相关阅读:
    《软件方法》读书笔记2
    《代码阅读方法与实践》读书笔记3
    课堂讨论记录
    《代码阅读方法与实践》读书笔记2
    [洛谷] P1948 [USACO08JAN]Telephone Lines S(二分+SPFA)
    2020 CCPC秦皇岛 正式赛题解
    [洛谷] P3146 [USACO16OPEN]248 G (区间DP)
    [进阶指南] 最大子序和
    [训练] 图的K步移动最大收获
    [计蒜客] 受力平衡(组合数学 + 乘法逆元)
  • 原文地址:https://www.cnblogs.com/mzct123/p/8283448.html
Copyright © 2011-2022 走看看