
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
软件开发设计模式是程序员在学习软件开发技术的时候需要重点掌握的一个编程技术下面我们就通过案例分析来了解一下,单例模式需要解决哪些问题。
单例模式是简单的设计模式之一,但是它却存在一些问题与缺陷。下面简单说下单例模式的使用中需要注意的一些问题。
1.实例指针一定要设为静态吗?
因为GetInstance这个方法要用到该实例指针,且GetInstance这个方法是static的,所以这个指针必须是static的,否则GetInstance无法访问该实例指针。以此同时保证了向其他对象提供的同一个内存区的实例指针。
2.为什么不弃用懒汉式而直接用饿汉式?
先,懒汉式是的以时间换取空间的例子,就是每次获取实例时都要进行判断,看是否要创建实例,浪费判断时间。当然如果一直没有人用的话,就不会创建实例,则是节约空间。而饿汉式是的以空间换取时间,就是说当类装载的时候,就创建出一个实例,不管你用不用它,然后每次调用时就不用判断了,节省了运行时间。
这里说某种方式一定比另一种方式好,它们两者各有各的优势。关键取决于你在时间和空间上效率的取舍。
3.单例模式只是为了节省资源吗?
先要说明的是,在一些情况下使用单例模式是可以达到节省资源的目的,但是单例模式的意图不只是为了节省资源,如果仅仅为了节省资源就使用单例模式的话可能造成单例模式的滥用。单例模式是为了确保在整个应用期间只有一个实例,以达到用户的特定的使用目的。比如windows操作系统里,有多个线程要同时进行文件创建、打开、修改一个文件的操作时,就用到单例模式设计文件管理器。所有的文件操作都必须同个这个的实例来进行文件操作,避免的混乱的情况。
4.单例模式的坏处?
扩展困难,由于GetInstance静态函数没有办法生成子类的实例。如果要拓展,只有重写那个类。
隐式使用引起类结构不清晰。比如有时候,你并不知道某个类A是单例类,当你读类B的时候,你可能先看它头文件,或者类视图里的内容,从这里你无法知道A和B关系,因为B类在实现的时候才使用A类的那个所谓的GetInstance函数,读不到这行,你就会知道B类对A类的依赖关系。
导致程序内存泄露的问题。很多人只是调用了GetInstance生成的实例,却永远new被封装在GetInstance里忘了去释放内存。
5.什么情况下不能用单例模式?
单例模式简单易用,但是也是所有设计模式中容易滥用的模式。当你的类想得到很好的扩展时,不能使用单例模式。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。