当前位置: 首页 > news >正文

北京环保行业网站建设妇科医院网站优化服务商

北京环保行业网站建设,妇科医院网站优化服务商,做网站 广告费 步骤,wordpress 中国地图http://www.cnblogs.com/cxjchen/p/3148582.html 单例模式 单例模式#xff0c;可以说设计模式中最常应用的一种模式了#xff0c;据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人#xff0c;可能不会想到要去应用单例模式#xff0c;面对单例模式适用的情况可以说设计模式中最常应用的一种模式了据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人可能不会想到要去应用单例模式面对单例模式适用的情况可能会优先考虑使用全局或者静态变量的方式这样比较简单也是没学过设计模式的人所能想到的最简单的方式了。 一般情况下我们建立的一些类是属于工具性质的基本不用存储太多的跟自身有关的数据在这种情况下每次都去new一个对象即增加了开销也使得代码更加臃肿。其实我们只需要一个实例对象就可以。如果采用全局或者静态变量的方式会影响封装性难以保证别的代码不会对全局变量造成影响。 考虑到这些需要我们将默认的构造函数声明为私有的这样就不会被外部所new了甚至可以将析构函数也声明为私有的这样就只有自己能够删除自己了。在Java和C#这样纯的面向对象的语言中单例模式非常好实现直接就可以在静态区初始化instance然后通过getInstance返回这种就被称为饿汉式单例类。也有些写法是在getInstance中new instance然后返回这种就被称为懒汉式单例类但这涉及到第一次getInstance的一个判断问题。 下面的代码只是表示一下跟具体哪种语言没有关系。 单线程中 1 2 3 4 5 6 7 Singleton* getInstance() {     if (instance NULL)         instance  new Singleton();     return instance; } 这样就可以了保证只取得了一个实例。但是在多线程的环境下却不行了因为很可能两个线程同时运行到if (instance NULL)这一句导致可能会产生两个实例。于是就要在代码中加锁。 Singleton* getInstance() {lock();if (instance NULL){instance new Singleton();}unlock();return instance; } 但这样写的话会稍稍映像性能因为每次判断是否为空都需要被锁定如果有很多线程的话就爱会造成大量线程的阻塞。于是大神们又想出了双重锁定。 Singleton* getInstance() {if (instance NULL){lock();if (instance NULL){instance new Singleton();}unlock();}return instance; } 这样只够极低的几率下通过越过了if (instance NULL)的线程才会有进入锁定临界区的可能性这种几率还是比较低的不会阻塞太多的线程但为了防止一个线程进入临界区创建实例另外的线程也进去临界区创建实例又加上了一道防御if (instance NULL)这样就确保不会重复创建了。   常用的场景 单例模式常常与工厂模式结合使用因为工厂只需要创建产品实例就可以了在多线程的环境下也不会造成任何的冲突因此只需要一个工厂实例就可以了。   优点 1.减少了时间和空间的开销new实例的开销。 2.提高了封装性使得外部不易改动实例。   缺点 1.懒汉式是以时间换空间的方式。 2.饿汉式是以空间换时间的方式。   C实现代码 #ifndef _SINGLETON_H_ #define _SINGLETON_H_class Singleton{ public:static Singleton* getInstance();private:Singleton();//把复制构造函数和操作符也设为私有,防止被复制Singleton(const Singleton);Singleton operator(const Singleton);static Singleton* instance; };#endif   #include Singleton.hSingleton::Singleton(){}Singleton::Singleton(const Singleton){}Singleton Singleton::operator(const Singleton){}//在此处初始化 Singleton* Singleton::instance new Singleton(); Singleton* Singleton::getInstance(){return instance; }   #include Singleton.h #include stdio.hint main(){Singleton* singleton1 Singleton::getInstance();Singleton* singleton2 Singleton::getInstance();if (singleton1 singleton2)fprintf(stderr,singleton1 singleton2\n);return 0; } 1 g -o client Singleton.cpp client.cpp 运行结果
http://wiki.neutronadmin.com/news/217204/

相关文章:

  • 网站更换运营商要重新备案七种人不宜学软件工程
  • 龙岗网站seo东莞工程建设交易中心网
  • 百度一下浏览器网站群站优化
  • 深圳十大建筑设计公司怎么做seo
  • 网站的排版设计做企业网站需要买什么资料
  • 免费平面设计模板网站邢台网站制作公司
  • 游戏网站平台怎么做的做网站的服务器用什么系统
  • 四川网站设计劳务输送网站建设方案
  • 网站在只有域名了国外有哪些做服装的网站有哪些
  • 青岛做网站青岛做网站辽宁省建设工程信息网官网电话
  • 过界女主个人做网站的网络工程公司如何接单
  • 泰州企业网站建设公司国外免费网站域名服务器查询
  • 网站开发工具中的三剑客网络营销方式的优点
  • 全国知名网站排名如何设置网站兼容性
  • 网站建设总体方案设计做网站流程图
  • 四川城市建设住建厅网站执行信息公开网
  • 这几年做哪些网站致富废旧网站那个做的最好
  • 长春网络建站模板wordpress插件h5
  • 没有网站也可以做cpa阿里云com域名注册万网
  • 免费做app页面的网站做网站后台主要负责什么
  • 餐饮众筹模板网站建设做高防鞋 哪个网站能上架
  • 学怎么做建筑标书哪个网站打造公司的网站
  • 岳阳做网站费用高级网页设计师证书
  • 做网站建设销售员准备什么福田网站建设推荐
  • 张店网站优化推广可以做英语翻译兼职的网站
  • 网站策划书模板范文wordpress 退出块引用
  • 宝塔怎么创建网站谷歌三件套下载
  • 怎么在微信上做网站建设通网站的信息是哪里来的
  • 网站内容建设 发布形式创建一个网站需要做哪些工作
  • 南京市建设发展集团有限公司网站属于门户网站的有