设计模式:对问题行之有效的解决方式。其实它是一种思想。
单例模式
保证一个类在内存中对象唯一性
必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。
如何保证对象唯一性呢?
1,不允许其他程序用new创建该类对象。
2,在该类创建一个本类实例。
3,对外提供一个方法让其他程序可以获取该对象。
步骤:
1,私有化该类构造函数。 //工具类也有这一步
2,通过new在本类中创建一个本类对象。
3,定义一个公有的方法,将创建的对象返回。
饿汉式 //开发
private static Single s = new Single();//类一加载,对象就存在了
private Single(){}
public static Single getInstance()//可加上控制条件
{
return s;
}
懒汉式 //多线程安全隐患 //面试
private static Single2 s = null;//类加载进来没有对象
private Single2(){}
public static Single2 getInstance()//只有调用方法才会创建对象
{
if(s==null)
s = new Single2();
return s;
}
</pre><p></p><h2></h2><p><span style="font-size:18px;">抽象类的应用:</span></p><h1><span style="font-size:18px;">模板方法设计模式</span></h1><div><p>/* 是一种设计思想,将不确定的东西暴露出去,不一定是抽象方法</p><p>获取一段程序运行的时间</p><p>原理:获取程序开始和结束时间相减即可</p><p>获取时间:<span style="font-family: 'Times New Roman';">System.currentTimeMillis();</span></p><p> </p><p>模板方法设计模式</p><p>在定义功能时,功能的一部分是确定的,单有一部分是不确定的(抽象)</p><p>确定的部分在使用不确定的部分,将不确定的部分暴露出去,又该类的子类去完成</p><p>*/</p><p></p><pre code_snippet_id="81294" snippet_file_name="blog_20131128_3_3086082" name="code" class="java">abstract class GetTime
{
public final void getTime()//确定的功能,使用final避免被覆盖
{
long start= System.currentTimeMillis();
runcode();
long end = System.currentTimeMillis();
System.out.println("毫秒:"+(end-start));
}
public abstract void runcode(); //抽象方法被子类实现,或者一般方法被子类覆盖
}
class SubTime extends GetTime
{
public void runcode()
{
for (int x=0; x<1000 ;x++ )
{
int sum=0;
sum+=x;
System.out.print(sum);
}
}
}
class TemplateDemo
{
public static void main(String[] args)
{
SubTime gt=new SubTime();
gt.getTime();
}
}