黑马程序员:设计模式

本文详细介绍了设计模式中的单例模式和享元模式,包括它们的基本概念、工作原理及实际应用案例。单例模式确保一个类只有一个实例,而享元模式则用于高效管理大量相似对象,通过共享机制减少资源消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


        设计模式,在初学者看来,是个近乎神秘的东西。接触了之后,发现也不过如此。设计模式总结了我们在做程序设计时经常出现的问题和解决方案。通过视频的学习,了解了两种设计模式。

1、单例模式(singleton):某个类只有一个实例,这个类必须自己创建这个实例,并且向整个系统提供。特点是,类的构造方法时私有的,避免外部利用构造方法直接创建多个实例。其三种基本形式如下:

 

//Singleton类一进入内存就已经创建好了对象

public class Singleton
{   
   private static Singleton instance = new Singleton();  

   private Singleton()
   { }
   public static Singleton getInstance()
    {
        return instance;
    }
} 

 

//Singleton类进入类存对象还没创建,只有调用了getInstance()方法时才创建

public class Singleton
{

  private static Singleton instance = null;
  Singleton()
  { }

   public static synchronized Singleton getInstance()    //以线程同步的方式创建
  {
       if(instance == null)
       {   
                instance = new Singleton();   
       }  
    return instance;
   }
} 

 

 //综合了以上两种方式的优点

public class Singleton
{

  private static Singleton instance = null;
  Singleton()
  { }

   public static Singleton getInstance()
  {

        if(instance == null) //这个判断是提高效率,减少对synchronized的判断

       {

            synchronized(Singleton.class) //使用字节码对象锁,给以下代码块加锁
            if(instance == null)
            {   
                   instance = new Singleton();   
            }

       } 
      return instance; 
   }
} 

 

2、享元模式(flyweight):如果很多很小的对象,很多相似的属性,那么就可以把它编成一个对象,还有那些不同的东西把它编成外部的属性,作为方法的参数传入,称为外部状态;那些相同的属性称之为内部状态。特点是:当一个对象平凡用到,要把它封装到某个内存区域,实现共享访问,避免重复创建大量小对象,浪费资源。学习jdk1.5新特性时用到这种设计模式,例如课程中讲到的自动拆装箱过程细节问题:


    Integer i1 = 13;    /*数字若在一个字节内(-128~127)时,就自动将其
    Integer i2 = 13;      缓存,需要时直接从中取出*/
    System.out.println(i1 == i2); //输出true
    Integer i1 = 138;
    Integer i2 = 138;
    System.out.println(i1 == i2); //输出false

 

设计模式目前总共就23种,确实很了不起,以后还要在实践中继续探索!


---------------------- android培训java培训、期待与您交流! ----------------------
详细请查看:http://edu.youkuaiyun.com/heima

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值