您的位置:首页 > 编程语言 > Java开发

JAVA基础之设计模式

2016-05-22 14:49 302 查看
设计模式:对问题行之有效的解决方式。其实是一种思想。

1.单例设计模式

解决的问题:就是可以保证一个类在内存中的对象唯一性。

(即一个类只创建一个对象,多个程序调用时不创建对象,只是引用。)

比如对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。

如何保证对象唯一性呢?

1.不允许其他程序用new创建该类对象。

2.在该类创建一个实例。

3.对外提供一个方法让其他程序可以获取该对象。

上面话的意思就是,为了保证只创建一个对象,其他程序使用该对象只能是调用,不能创建新对象。

应该做的方法就是保证其他程序不能创建对象,而自己本身创建一个并私有,且提供方法供其他程序使用。

步骤:

1.私有化该类的构造函数。(构造函数用于创建对象时初始化,一旦私有了构造函数,其他程序就无法创建新对象)

2.通过new在本类中创建一个本类对象。

3.定义一个公有的方法,将创建的对象返回。

示例:

class Single
{
public static void main(String[] args)
{
/*我们在主函数调用Single对象。我们知道调用时有两种方法
一种是对象调用,但是这里我们不能创建对象,就无法调用。
另一种就是类名调用,在这里我们只能使用这种方法。
但是类名调用有个前提,只能是静态的,所以我们调用的公有方法也只能是静态的。*/
Single ss=Single.getInstance();
Single s2=Single.getInstance();
//上面两条语句都是在用类名调用Single中所创建的对象,只是调用后重新命名,其实使用的是一个对象。
System.out.println(ss==s2);
//我们判断ss和s2调用的是否是同一个对象,即他们的地址值是否是同一个,结果是true。
System.out.println("----------");
SingleTest s1=SingleTest.getInstance();
SingleTest s3=SingleTest.getInstance();
s1.setNum(30);
s3.setNum(8);
System.out.println(s1.getNum());
System.out.println(s3.getNum());

}
}

class Single
{
private static Single s=new Single();//这是在类中创建一个该类对象。该对象名为s。
//静态函数访问的内容必须是静态的,所以我们给s前加上修饰符,让他转为静态。
//static Single s里的Single是引用数据类型。
//私有该对象是为了避免其他程序在调用时,直接调用s,随意更改。
//为了保证该对象的可控,所以我们私有该对象,只提供函数调用方法。
private Single(){} //这是私有化本类构造函数。
public static  Single getInstance()//提供外部使用的公有函数(方法)。
{//我们用类名调用这个函数,这个函数就必须是静态的。
return s;
}
}
//实际应用
class SingleTest
{
private int num;
private static SingleTest St=new SingleTest();
private SingleTest(){}
public static	SingleTest getInstance()
{
return St;
}
public void setNum(int home)
{
num=home;//如果两个变量名相同,那么this关键词必须写。
}
public int getNum()
{
return num;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: