学习
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
网友评论