类成员的可访问性(不管怎么设计,实现某一个类在内存中只能调用一次)单态设计模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fighting123678/article/details/82942073

为了控制创建对象的个数,需要收回创建对象的权利,下面想办法设置Teacher为内存中唯一对象,在Text中创建并使用Teacher;


Teacher

package cn.net.sdkd.cise;

public class Teacher {
	private Teacher() {//创建对象的权利收回,由类自己提供
		
	}

}

Text

import cn.net.sdkd.cise.Teacher;
public class Text {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Teacher t;//刚开始的时候会报错,所以需要import导入Teacher这个类;
		//Teacher t=new Teahcer();//这里会报错是因为在Teacher中Teacher()是私有的,外部无法使用;
	}

}

出现以上的情况,无法在Text中创建Teacher对象之后,只能通过Teacher类来访问,而且在Teacher类中需要提供一种方法,并且这种方法必须是public类型的。


Teacher

package cn.net.sdkd.cise;

public class Teacher {
	private Teacher() {//创建对象的权利收回,由类自己提供
		
	}
	public Teacher getTeacher() {//这个是在Teacher类中提供的一种public方法;
		return new Teacher();//自己的类中,可以使用私有成员,但是这样做的每次都返回一个新对象,这样的话,对象的个数又超过了一个;
	}
}

上面这样做的话,每次都返回一个新对象,这样的话,对象的个数又超过了一个,所以需要做如下改动;

package cn.net.sdkd.cise;

public class Teacher {
	private Teacher t;
	private Teacher() {//创建对象的权利收回,由类自己提供
		
	}
	public Teacher getTeacher() {//这个是在Teacher类中提供的一种public方法;
		if(t==null) {
			t = new Teacher();
		}
		return t;//自己的类中,可以使用私有成员,但是这样做的每次都返回一个新对象,这样的话,对象的个数又超过了一个;
	}
}

在Text中,因为无法通过Teacher t=new…来创建对象,所以想通过类直接访问,但是在Teacher中getTeacher() 是一个普通方法,普通方法必须首先要生成对象,但是生成对象也没法生成,所以getTeacher()如果是普通方法的话是没法用的,必须设置为static,这样在Text中才可以通过类直接使用。

package cn.net.sdkd.cise;

public class Teacher {
private static Teacher t;
private Teacher() {//创建对象的权利收回,由类自己提供

}
public static Teacher getTeacher() {//这个是在Teacher类中提供的一种public方法;
	if(t==null) {
		t = new Teacher();
	}
	return t;//自己的类中,可以使用私有成员,但是这样做的每次都返回一个新对象,这样的话,对象的个数又超过了一个;
}

}

Text

import cn.net.sdkd.cise.Teacher;

public class Text {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Teacher t1=Teacher.getTeacher();//刚开始的时候会报错,所以需要import导入Teacher这个类;
		Teacher t2=Teacher.getTeacher();
		if(t1==t2) {
			System.out.println("same");
		}
	}

}

Teacher

package cn.net.sdkd.cise;

public class Teacher {
	private static Teacher t;//static类型的,因为在静态方法中使用;
	private Teacher() {//创建对象的权利收回,由类自己提供
		
	}
	public static Teacher getTeacher() {//这个是在Teacher类中提供的一种public方法;//static类型的,因为需要通过类直接访问;
		if(t==null) {
			t = new Teacher();
		}
		return t;
	}
}

可以在一个类中新建一个自己类的引用或者是生成一个自己的类,比如上面,在Teacher类中生成了Teacher t,这样是对的,是一种方法。

猜你喜欢

转载自blog.csdn.net/fighting123678/article/details/82942073