单例设计模式:解决一个类在内存只存在一个对象。
想要保证对象唯一,怎么办?
1、为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
2、还为了让其他程序可以访问到该类对象,只好在本类中自定义一个对象。
3、为了让其他程序对自定义的访问,可以对外提供一些访问方式。
这三步怎么使用代码体现呢?
1、创建私有静态构造函数(用private修饰)。
private修饰:一般类变量应该私有化,只能通过成员方法来访问。
2、创建私有静态对象(用private和statis修饰)。
statis修饰:静态方法访问类中的成员,成员也必须是静态的。
private修饰:禁止其他类创建本类对象。
3、创建共有静态方法获取私有对象(用public和statis修饰)。
public修饰:公开一个获取该类对象的方法。
static修饰: 调用方法可通过类名调用和对象调用,但没有对象,只能通过类名,所以该方法必须是静态的。
不设置set方法,是因为该类只有一个对象,不需要设置。
- class Single{
- private Single(){}
- private static Single s = new Single();
- public static Single getInstance(){
- return s;
- }
- }
- class SingleDemo{
- public static void main(String[] args){
- Single ss = Single.getInstance();
- }
- }
复制代码
那么单例设计怎么使用?
对于事物该怎么描述,就怎么描述。
当需要该事物的对象保证在内存中唯一时,就将以上的三步加上即可。
这种方式也称为饿汉式
- class Single{
-
- //私有成员变量
- private int num;
- //对外公开设置方法
- public void setNum(int num){
- this.num = num;
- }
- //对外公开获取方法
- public int getNum(){
- return num;
- }
- //私有构造函数,阻止本类以外的类使用
- private Single(){}
- //创建本类对象
- //被静态方法访问,就要被 static 修饰
- //s是成员变量,要用 private 修饰
- private static Single s = new Single();
- //提供共有方法访问本类私有静态对象
- //返回值为类类型
- public static Single getInstance(){
- //访问本类对象,静态方法只能访问静态对象
- return s;
- }
- }
- class SingleDemo{
- public static void main(String[] arge){
- Single s1 = Single.getInstance();
- Single s2 = Single.getInstance();
- //s1和s2都是同一个对象
- System.out.println(s1==s2);
-
- //设置s1的值,s2的值也跟着改变,因为他们都是同一对象。
- s1.setNum(25);
- System.out.println(s1.getNum());//25
- System.out.println(s2.getNum());//25
- }
- }
复制代码
|
|