夜雪天狼
学习笔记
技术博文
转载备份
心灵鸡汤
目录
java设计模式
发布者:caijw
阅读量:63438
发布时间:2013-07-06 01:51:24
# 设计模式概述 ## 概念 解决某一问题最行之有效的方法,共有23种设计模式 # 单例设计模式 ## 单例作用 使一个类在内存中只存在一个对象 ## 单例——饿汉式 ```java //特点是先初始化对象。如:Single类一进内存,就已经创建好了对象。在实际开发中,出于安全考虑,建议使用饿汉式 class Single { private Single(){}; private static Single s = new Single(); public static Single getInstance() { return s; } } ``` ## 单例——懒汉式 ```java // 特点对象是方法被调用时,才初始化 // 这也叫对象的延时加载 // 如:在以下完整代码中,Single类进内存,对象还没有存在,只有调用了getInstance()方法时,才创建对象 class Single { private static Single s = null; private Single(){} public static Single getInstance() { if(s == null) s = new Single(); return s; } } ``` ## 单例——懒汉式改进 ```java //懒汉式在多线程操作时会出现安全隐患,以下写出解决安全隐患的代码,但代码繁琐,建议使用饿汉式 class Single { private static Single s = null; private Single(){} public static Single getInstance() { //判断是否为空,以确定执行同步代码块,提高效率 if(s==null) { //将判断和赋值动作封装在同步代码块中,保证多线程安全 synchronized(Single.class) { //判断是否为空,防止某线程在刚刚判断完上一个if语句而失去了执行权,导致的线程安全问题 if(s==null) s = new Single(); } } return s; } } ``` # 模版方法设计模式 ## 模板方法简述 在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去。由该类的子类去完成 ## 模板方法代码 ```java //该设计模式在使用时,建立子类对象,调用子类继承自父类的getTime() abstract class GetTime { //计算某段代码运行完成所需时间 //该方法不能被读写所以定义为final public final void getTime() { long start = System.currentTimeMillis(); run();//调用需要计算时间的运行代码 long end = System.currentTimeMillis(); System.out.println("用时:"+(end-start)+"毫秒"); } //要运行的代码不确定,定义为抽象由子类去实现 //该方法不一定抽象,也可能有默认方式,如果觉得默认的不行可以复写 //设计模式是一种思想,主要理解思想 public abstract void run(); } class SunGetTime extends GetTime { //复写父类的run方法 public void run() { for(int i = 0; i<1000; i++) { System.out.print(i); } } } ``` -separator-