10.3构造方法私有化

在类结构中每当使用关键字new都会调用构造方法并实例化新的对象,然而在设计中,也可以利用构造方法的私有化形式来实现实例化对象的控制。

10.3.1单例设计模式

单例设计模式是指在整个系统中一个类只允许提供一个实例化对象,为实现此要求就可以通过private进行构造方法的封装,这样该类将无法在类的外部利用关键字new实例化新的对象,同时为了方便使用本类的方法。则可以在内部提供一个全局实例化对象供用户使用。
范例:单例设计模式

package com.lxh.tenchapter;

public class SingIeton {
	//在类内部进行Singleton对象实例化,为了防止可能出现重复实例化所以使用final标记
        private static final SingIeton INSTANCE=new SingIeton();
        private SingIeton(){}   //构造方法私有化,外部无法通过关键字new实例化
        /**
         * 获取本类实例化对象方法,static方法可以不受实例化对象的限制进行调用
         * @return  INSTANCE内部实例化对象,不管调用多好次此方法都只返回同一个实例化对象
         */
		public static SingIeton getInstance() {
			return INSTANCE;
		}
        
		
		public void print() {
			System.out.println("520");
		}
}


package com.lxh.tenchapter;

public class Java232 {
	//在外部不管有多少个SingIeton类对象,实质上最终都只调用唯一的一个SingIeton类实例
       public static void main(String[] args) {
    	   SingIeton  inst=SingIeton.getInstance();
    	   inst.print();
	}
}

执行结果520
本程序将 SingIeton类的构造方法进行了private私有化封装,这样将无法在类的外部通过关键字new实例化本类对象。同时为了方便使用SingIeton类对象,在类内部提供了公共的INSTANC对象作为本类成员属性,并利用static方法可以直接获取本类实例以实现相关方法调用。
单例设计模式分为两种:饿汉式单例设计和懒汉式单例设计。
饿汉式单例设计:类中定义成员属性时就直接进行了对象实例化处理。
懒汉式单例设计:第一次使用类的时候才会进行对象实例化。
范例:定义懒汉式单例设计模式

package cn.mldn.demo;
class Singleton {	// 单例程序类
	// 定义公共的instance属性,由于需要在第一次使用时实例化,所以无法通过关键字final定义
	private static Singleton instance;	/ 声明本类对象
	private Singleton() {}// 构造方法私有化,外部无法通过关键字new实例化 
	/**
	 * 获取本类实例化对象方法,static方法可以不受实例化对象的限制进行调用
	 * @return 返回唯一的一个Singleton类的实例化对象
	 */
	public static Singleton getInstance() {
		if (instance == null) {	// 第一次使用时对象未实例化
			instance = new Singleton() ; 	// 实例化对象
		}
		return instance ;	// 返回实例化对象
	}
	public void print() {// 信息输出
		System.out.println("www.mldn.cn");
	}
}
public class JavaDemo {
	public static void main(String args[]) {
		// 在外部不管有多少个Singleton类对象,实质上最终都只调用唯一的一个Singleton类实例
		Singleton instance = null; 	// 声明对象
		instance = Singleton.getInstance();	// 获取实例化对象
		instance.print();	// 通过实例化对象调用方法
	}
}

本程序在 SingIeton 类内部定义instance成员属性时并没有进行对象实例化,而是在第一次调用getInstance()方法时才进行了对象实例化操作,这样可以节约程序启动时的资源。

10.3.2多例设计模式

单例设计模式只留有一个类的实例化对象,而多例设计模式会定义出多个对象,例如定义一个表示星期的操作类,这个类的对象有7个实例化对象;定义一个表示性别的类有两个实例化对象;类似这样的类就不因该由用户无限制的创造实例化对象,应该只使用有限的几个,这个就属于多例设计模式。
范例:实现多例设计模式

package com.lxh.tenchapter;

public class Color {   //多例设计模式
       private static final Color RED=new Color("红色");
       private static final Color GREEN=new Color("绿色");
       private static final Color BLUE=new Color("蓝色");
       private String title;
       private Color(String title) {
    	   this.title=title;
       }
       public static Color getInfo(String c) {
    	   switch(c) {
    	      case "red":
    	    	  return RED;
    	      case "green":
    	    	  return GREEN;
    	      case "blue":
    	    	  return BLUE;
    	    	  default:
    	    		  return null;
    	   }
       }

	@Override
	public String toString() {
		return "Color [title=" + title + "]";
	}
       
}


package com.lxh.tenchapter;

public class java234 {
       public static void main(String[] args) {
		  Color c=Color.getInfo("green");
		  System.out.println(c);
	}
}

执行结果:Color [title=绿色]
由于需要控制实例化对象的产生个数,所以本程序将构造方法进行私有化定义后在内部提供了3个实例化对象,为了方便外部类使用,可以通过getInfo()方法利用对象标记获取实例化对象。

发布了162 篇原创文章 · 获赞 9 · 访问量 3099

猜你喜欢

转载自blog.csdn.net/ll_j_21/article/details/104661427
今日推荐