美文网首页
2018-07-09学习小结 - 包及访问权限6

2018-07-09学习小结 - 包及访问权限6

作者: 砾桫_Yvan | 来源:发表于2018-07-10 01:25 被阅读0次

学习

18.5 构造方法私有化——单例设计模式(Singleton)

范例 18-9 自动生成的构造方法的类

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年7月10日 上午12:32:33
 * @Description TODO 自动生成的构造方法的类
 */
class Singleton {
    public void print() {
        System.out.println("Hello World.");
    }
}

包含无参构造方法,自动生成的什么都不做构造方法。

范例 18-10 实例化对象

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年7月10日 上午12:32:33
 * @Description TODO 自动生成的构造方法的类和实例化对象
 */
public class P465_18_9 {
    public static void main(String[] args) {
        Singleton instance = null; // 声明对象
        instance = new Singleton(); // 实例化对象
        instance.print();
    }
}

class Singleton {
    public void print() {
        System.out.println("Hello World.");
    }
}

运行结果:

运行结果

范例 18-11 实例化属于自己的对象

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年7月10日 上午12:42:28
 * @Description TODO 实例化属于自己的对象
 */
public class P467_18_11 {

    public static void main(String[] args) {
        Singleton1 instance = null; // 声明对象
        instance = Singleton1.instance; // 实例化对象
        instance.print(); // 调用方法打印输出
    }

}

class Singleton1 {
    static Singleton1 instance = new Singleton1(); // 实例化对象
    
    // 此时的类中不会再生成无参的什么都不做的构造
    private Singleton1() {
    }

    public void print() {
        System.out.println("Hello World.");
    }
}

运行结果:

运行结果

private的构造方法时,用static的内部实例化对象可以调用。

范例 18-12 单例设计模式

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年7月10日 上午12:56:28
 * @Description TODO 单例设计模式
 */
public class P467_18_12 {

    public static void main(String[] args) {
        Singleton2 instance = null; // 声明对象
        instance = Singleton2.getInstance(); // 获取实例化对象
        instance.print(); // 调用方法打印输出
    }

}

class Singleton2 {
    private static Singleton2 instance = new Singleton2(); // 实例化对象

    // 此时的类中不会再生成无参的什么都不做的构造
    private Singleton2() {
    }

    public static Singleton2 getInstance() {
        return instance;
    }

    public void print() {
        System.out.println("Hello World.");
    }
}

运行结果:

运行结果

如上代码,static的内部实例化对象,在全局缓冲区之中是一个公共属性,外部声明多少也只是取得了唯一的一个实例化对象,这样的设计就是单例设计模式。既然想表示唯一性,上述代码最好给内部实例化对象加一个关键字final定义。

18.6 多例设计模式

与单例不同的多例设计模式可以定义多个对象,但是构造方法不能用public定义。

应用场景:现在要定义一个表示一周时间数的类,此类只有7个对象。如果定义一个表示性别的类,那么此类只有两个对象。例如表示颜色基色的类只有三个对象。

范例 18-13 多例设计

package com.Javastudy2;

/**
 * @author Y.W.
 * @date 2018年7月10日 上午1:10:00
 * @Description TODO 多例设计模式
 */
public class P469_18_13 {

    public static void main(String[] args) {
        System.out.println(Sex.getInstance(0));
    }

}

class Sex { // 性别
    private String title; // 保存信息
    private static final Sex MALE = new Sex("男");
    private static final Sex FEMALE = new Sex("女");

    private Sex(String title) { // 构造方法
        this.title = title;
    }

    public static Sex getInstance(int ch) { // get实例化对象函数
        switch (ch) {
        case 0:
            return MALE;
        case 1:
            return FEMALE;
        default:
            return null;
        }
    }

    public String toString() {
        return this.title;
    }
}

运行结果:

运行结果

小结

单例在内部定义一个内部实例化对象,多例设计模式可以定义多个内部对象,但是构造方法都不能用public定义。


记于2018年7月10日01:24:14
BY Yvan

相关文章

网友评论

      本文标题:2018-07-09学习小结 - 包及访问权限6

      本文链接:https://www.haomeiwen.com/subject/qwpxpftx.html