黑马程序员_单例设计模式和对象数组的使用

------- android培训java培训、期待与您交流! ----------

什么是设计模式?

解决某一问题最行之有效的方法,就称为设计模式。

单例设计模式:

单例模式就是确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。

举例说明:

class SingleTest
{
	public static void main(String[] args)
	{
		Single sing1 = Single.getInstance();
		Single sing2 = Single.getInstance();

		sing1.setNumber(20);
		System.out.println("sing2.getNumber() = "+sing2.getNumber());

		boolean b = sing1.getNumber()==sing2.getNumber();
		System.out.println("sing1.getNumber()==sing2.getNumber() = "+b);

		boolean bool = sing1.equals(sing2);
		System.out.println("sing1.equals(sing2) = "+bool);
	}
}

/*
class Single	//饿汉式:Single类一进内存,就已经创建好了对象。
{
	private static Single single = new Single();
	private Single(){}
	public static Single getInstance()
	{
		return single;
	}
}
*/

class Single	//懒汉式:Single类进内存对象还没有存在,只有调用了getInstance方法时才建立对象,对象是函数被调用时才初始化,也叫做对象的延时加载。
{
	private int number;
	private static Single single = null;
	private Single(){}
	public static Single getInstance()	//同步代码块方式
	{
		if(single==null)
		{
			synchronized(Single.class)
			{
				if(single==null)
					single = new Single();
			}
		}
		return single;
	}

/*
	public static synchronized Single getInstance()	//同步函数的方式
	{
		if(single==null)
			single = new Single();
		return single;
	}
*/
	public void setNumber(int number)
	{
		this.number = number;
	}

	public int getNumber()
	{
		return number;
	}
}
运行结果如下:
C:\Users\lenovo\Desktop>javac SingleTest.java

C:\Users\lenovo\Desktop>java SingleTest
sing2.getNumber() = 20
sing1.getNumber()==sing2.getNumber() = true
sing1.equals(sing2) = true

 单例设计模式的总结:

从上面的例子可以看出,第一种方式效率更高更安全,所以定义单例,建议使用饿汉式。

对象数组:

就是把对象用数组方式来存储,相当于集合。

举例说明:

class Person
{
	private String name;
	private int age;
	Person()
	{

	}

	Person(String name,int age)
	{
		this.name = name;
		this.age = age;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getName()
	{
		return name;
	}

	public void setAge(int age)
	{
		this.age = age;
	}

	public int getAge()
	{
		return age;
	}

	public String say()
	{
		return "我是:"+this.name+",今年:"+this.age+"岁";
	}
}
public class ObjectArrayTest
{
	public static void main(String[] args)
	{
		Person p[] = {new Person("张三",19),new Person("李四",25),new Person("王五",24)};	//把对象存入数组

		System.out.println("数组中原来的对象是:");
		for(int i=0;i<p.length;i++)
		{
			System.out.println(p[i].say());
			if(i==2)
				{
					p[i].setName("SetObj");
					p[i].setAge(29);
				}
		}

		System.out.println("数组中设置后的对象是:");
		for(int i=0;i<p.length;i++)
			System.out.println(p[i].say());
	}
}
运算结果如下:
C:\Users\lenovo\Desktop>javac ObjectArrayTest.java

C:\Users\lenovo\Desktop>java ObjectArrayTest
数组中原来的对象是:
我是:张三,今年:19岁
我是:李四,今年:25岁
我是:王五,今年:24岁
数组中设置后的对象是:
我是:张三,今年:19岁
我是:李四,今年:25岁
我是:SetObj,今年:29岁

对象数组的总结,不只是集合才可以存对象,数组也可以存对象,使用的时候看需求而选用数组还是集合

------- android培训java培训、期待与您交流! ----------

详细请登录:http://edu.youkuaiyun.com/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值