黑马程序员_3种设计模式

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



在教学视频中,毕老师和张老师提到了3种设计模式,如下:

----------------------------------------------------------------------------------------------------------------------------------------

一. 单例设计模式——解决一个类在类存中只存在一个对象
 
想要保证对象唯一
1.为了避免其他程序过多建立该类对象,先控制其他程序建立该对象
2.还为了其他程序可以访问该类对象,只好在本类中,自定义一个对象
3为了方便其他程序对自定义对象的访问,可以提供一些对外访问方式

这三部怎么用代码体现
1.将构造函数私有化
2.在本类中创建一个对象
3.提供一个方法可以获取到该方法。

当需要该对象保证在内存中唯一时,就将以上三步即可

饿汉式 Single类一进内存 就创建好了对象

------------------------------------------------------------------------------------------------

class Single{
 private int num;
        private Single(){}      //1.将构造函数私有化
 private static Single sl=new Single();    //2.在本类中创建一个对象
        public int getNum() {
  return num;
 }
 public void setNum(int num) {
  this.num = num;
 }
 public Single getInstance(){   //3.提供一个方法可以获取到该方法
  return sl;   //以上三步必须实现
 }
}

------------------------------------------------------------------------------------------------

懒汉式
对象是方法被调用时,才初始化对象,也叫对象的延时加载。

class Single{
 private int num;
         private Single(){}      //1.将构造函数私有化
 private static Single sl=null;    //2.在本类中创建一个对象
 
 public int getNum() {
  return num;
 }
 public void setNum(int num) {
  this.num = num;
 }
       
 public Single getInstance(){      //3.提供一个方法可以获取到该方法
        if(sl==null){       //Single类进内存,对象还没有存在,只有调用getInstance方法时,才建立对象   

   synchronized (Single.class){      //使用同步代码块确保安全性

       if(sl==null){
   sl=new Single();
                        }
      }
  }
  return sl;
 }
}


记录原则:定义单例建议使用单例

---------------------------------------------------------------------------------------------------------------------------

二. 模版模式

需求:获取一段程序运行时间
原理:获取程序开始和结束的时间并想减

模板方法设计模式
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分使用不确定的部分,那么这是就将不确定的部分暴露出去由该类的子类去完成。

例子:

------------------------------------------------------------------------------------------------

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{
 @Override
 public void runcode() {     //实现抽象方法
  for(int i=0;i<1000;i++){
   System.out.println(i);
  }
 }
}

------------------------------------------------------------------------------------------------

public class TemplateDemo {
 public static void main(String[] args) {
            new SubTime().getTime();
 }

}

好处:1.提高了扩张性  2.提高了复用性 

--------------------------------------------------------------------------------------------------------------------------------------- 

三.  享元模式
把很多很小的具有相同的属性的对象,编成一个对象,把那些不同的属性,变成方法的参数成方法的参数传入。

public class Autobox {
 public static void main(String[] args) {
  Integer a=111;//自动装箱
  Integer b=111;
  System.out.println(a==b) ;    //true    因为当数值在byte范围内容,就不会创建新对象,而是使用已有对象

  Integer c=222;
  Integer d=222;
  System.out.println(c==d);     / /false       指向不同对象
 }

}

--------------------------------------------------------------------------------------------------------------------------------------- 

 

 

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

详细请查看:http://edu.csdn.net/heima/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值