`
文章列表

单例模式

  在应用程序的整个生命周期中,类的实例只能存在一个,或者0个。 在这个单例类中,该类的构造函数是private的,还有一个GetInstance的方法,用于获取该类实例。 单例模式分为两种:懒汉单例和饿汉单例; 懒汉单例:不会自己实例化,只有自己去new,这里就要考虑到一个线程安全的问题了,应用lock来防止两个同步线程创建两个实例,应用double check来维持只有一个实例的创建和减少每次都调用lock导致性能损耗   public class Singleton     {         //定义一个私有的静态全局变量来保存该类的唯一实例          ...
工厂模式和抽象工厂模式都是创建型模式,工厂模式可以延迟类的实例化,而抽象工厂可以增加对象创建的灵活性和降低耦合。   简单工厂:具体工厂类 一个静态方法 接收不同的参数返回不同的对象(不符合ocp原则)工厂方法:抽象工厂类 一个纯虚方法 每一个子类工厂返回一种对象 (符合ocp原则)抽象工厂:抽象工厂类 多个纯虚方法 每一个子类工厂返回一系列不同对象 (符合ocp原则)   简单工厂:严格说并不是一个设计模式。简单工厂没有抽象类,只有一个具体工厂类如MyFactory,然后MyFactory里面有个工厂方法CreateProduct返回一个基类产品,具体返回什么具体实例通过传入参 ...
传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service)。比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个"服务"。 通俗地说,"服务"就是计算机可以提供的某一种功能。 根据来源的不同,
1:socket VS remoting     使用socket无疑是效率最高的。但是,在复杂的接口环境下,socket的开发效率也是最低的。故在兼顾开发效率的情况下,可以使用remoting来代替socket开发。并且:    1、Tcp通道的Remoting速度非常快。    ...
在开发WinForm程序时,为了方便显示程序的一些操作日志,我们经常将项目属性里的“Windows Application”项目类型修改为“Console Application”,这样在启动程序后,除了会显示窗体外,还会显示一个控制台,在控制台里会显示程序里通过Debug.Write等输出的日志。当产品发布的时候,我们可以将项目属性修改回”Windows Application”。 记得在窗体加载的时候加(Debug.Listeners.Add(new ConsoleTraceListencer());)
  一般会涉及的关键词:同步Invoke(delegate),InvokeRequired(InvokeRequired的职责是判断当前运行的线程是不是与窗体主线程是同一个线程。),异步IAsyncResult=delegate.beginInvoke(,,AsyncCallback(回调方法),),IsCompleted, 线程是系统资源调度的基 ...

WCF(1)

    博客分类:
  • WCF
  WCF:Windows Communication Fundation (windows 通讯接口). WCF本质上提供一个跨进程、跨机器以致跨网络的服务调用. WCF的服务不能孤立地存在,需要寄宿于一个运行着的进程中,我们把承载WCF服务的进程称为宿主,为服务指定宿主的过程称为服务寄宿(Service Hosting)。在我们的计算服务应用中,采用了两种服务寄宿方式:通过自我寄宿(Self-Hosting)的方式创建一个控制台应用作为服务的宿主(寄宿进程为Hosting.exe);通过IIS寄宿方式将服务寄宿于IIS中. WCF广泛采用基于自定义特性(Custom Attribt ...
假设有种情况,读取1000个文件,用进度条来显示读取的进度,这时如果要进度条正常滚动,而且要主界面不卡死,也就是说要把后台的事务处理(读取1000个文件)和界面的反应分开,这时就可以用多线程和delegate来处理。 首先,定义一个delegate,在主线程中也就是button的点击事件中新建一个子线程 Thread tr=new Thread(new ThreadStart(method)); tr.isbackgroundthread=true; tr.start(); 然后,在method的方法中也就是在读取文件的过程中应用delegate来触发界面进度条的更新 dele ...
.Net中的线程,可以分为后台线程和前台线程。后台线程与前台线程并没有本质的区别,它们之间唯一的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。其实,说白了就是当前台线程都结束了的时候,整个程序也就结束了,即使还有后台线程正在运行,此时,所有剩余的后台线程都会被停止且不会完成.但是,只要还有一个前台线程没有结束,那么它将阻止程序结束.这就是为什么有些设计不够完美的WinForm程序,在某种特定的情况下,即使所有的窗口都关闭了,但是在任务管理器的管理列表里仍然可以找到该程序的 ...
1.作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分 如:A,B表示两个类,在A,B中都有成员member。那么      A::member就表示类A中的成员member      B::member就表示类B中的成员member 2.全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分如: char    zhou;    //全局变量 void    sleep() {       char    zhou;    //局部变量
建网站准备:1、域名 2、网站程序 3、网页制作工具 4、空间 5、网站上传工具 6、后续工作    1、域名     想拥有一个属于自己的网站,域名是必不可少的,一个个性、好记的域名,很容易让人记住你的网站,在SEO方面,如果 ...
原则,故名思议则是本质的意思。所谓擒贼先擒王,研究设计模式自然要先了解设计原则,所有的模式都是在这些原则的基础之上发展起来的,有的是侧重一个,有的是多个都有所涉及。看完设计模式之后,我感觉到每个模式 ...

vector的初始化

    博客分类:
  • C++
一般vector的初始化有四种: 1。vector<int> v(10); //vector中有10个元素,都为0 2。vector<int> v(10,1); //vector中有10个元素,都为1 3。int arr[10]={1,2,3,4,5,6,7,8,9,10}; vector<int>v(arr,arr+10); //用array来初始化vector 4。vector<int>v; vector.push_back(1);//动态初始化vector  
有一个用户信息类CUserInfo,包括一个类成员函数initdatd(用于初始化用户数据),代码如下: class CUserInfo { public: void initdata(void) { // ... } }; 假设有一个列表存放所有的用户数据: std::list<CUserInfo> userlists; 我们需要定期的对userlists的所有用户做一次初始化操作,也即是调用类成员函数CUserInfo::initdata;

Const用法总结

    博客分类:
  • C++
C++ 语言可以用const来定义常量,也可以用 #define来定义常量。但是前者比后者有更多的优点:   const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查 ...
Global site tag (gtag.js) - Google Analytics