摘要: 前一篇文章介绍了简单工厂模式以及如何使用简单工厂模式来实现计算器。但是简单工厂模式有个问题,就是当我们需要扩展运算操作的时候,我们需要修改整个运算工厂类,或者说整个运算工厂类都必须开发才能允许操作扩展,这违背了开发-封闭原则,这是我们就需要工厂方法模式了。也就是说工厂方法模式必须定义一个用于创建对象的接口,让子类决定实例化哪个对象。也就是说,工厂方法模式把简单工厂模式的内部逻辑判断移到了客户端来判断,由客户端决定来实例化哪个对象。以实现计算器为例,对运算操作功能进行扩展时,我们不再需要在运算工厂类中新增case判断,只需要新增一个相应功能的运算类和工厂类即可。1 /// <summar. 阅读全文
posted @ 2012-06-17 00:24 iskyoole 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 在介绍简单工厂模式之间,我们首先得清楚面向对象的三大特性:封装、继承、多态。封装:每个对象都包括自己进行操作所需要的所有信息,而不依赖于其他对象来完成自己的操作。这样的方法和属性通过类的实例来实现。通过良好的封装可以降低耦合度;类的内部可以自由修改;类具有对外的清晰接口。继承:通过对对象进行抽象父类,子类实现父类功能并可扩展。 1.子类拥有父类非private的属性和功能(父类的构造函数例外,可以用base关键字访问,base代表着父类); 2.子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能; 3.子类可以以自己的方式重写父类的功能。 缺点:父类变,子类不得不变,父子是一种强耦合 阅读全文
posted @ 2012-06-14 23:04 iskyoole 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 前一篇文章介绍了什么是单例模式以及如何使用单例模式。那么在多线程程序中我们如何使用单例模式呢?也就是说在多线程中我们如何保证类实例的唯一性?众所周知,多线程中使用较多的是锁lock。lock是确保一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他的线程试图进入锁定的代码,将一直等待(被阻止)直到该对象被释放。程序运行时创建一个静态只读的线程辅助对象:public static readonly object syncroot=new object();在同一时刻加锁的那部分代码只能被一个线程访问:lock(syncroot){if(instance==null){ instance. 阅读全文
posted @ 2012-06-12 23:39 iskyoole 阅读(5172) 评论(0) 推荐(0) 编辑
摘要: 由于最近工作需要用到单实例模式,虽然以前对单实例模式有些了解,但却没有实际应用过,看了也就忘记了。再次熟悉一下:有时候,我们需要在程序运行整个过程中,为了效率问题或者用户体验,要求只产生对象的一个实例,这时候我们就需要用到单实例模式。例如:我们想在弹出对话框窗口时,不论用户触发多少次事件,当窗口存在时,只弹出一次。1:将弹出窗口Form1作为全局变量声明:Form1 frm1;在触发弹出窗口事件时判断Form1是否实例化,如果没有,实例化窗口弹出:if(frm1==null){ frm1=new Form(); frm1.show();}但这时还是有问题,当我们关闭窗口后,再点击却不能在弹.. 阅读全文
posted @ 2012-06-11 23:49 iskyoole 阅读(335) 评论(0) 推荐(0) 编辑
摘要: 由于最近项目需要在winform中有播放视频文件功能,相继在网上找了些资料,现在总结一下:需要播放视频文件,有四种实现方式:一、使用vs自带的windows media play控件优点:上手容易,使用简单;缺点:界面固定,支持格式有限。二、使用微软的DirectX播放优点:可以自定义界面,支持的播放格式增多;缺点:播放视频的时候必须另外安装解码器。三、使用libvlc播放优点:可以自己封装libvlc.dll(开源程序有牛人已经封装,可以直接拿来用),支持的格式增多;缺点:对支持的播放格式,需要添加对应的插件dll文件,所以dll有大概50M。四、使用DirectShow播放优点:开源程序, 阅读全文
posted @ 2012-03-25 22:50 iskyoole 阅读(9964) 评论(6) 推荐(1) 编辑
摘要: 向oracle数据库新增点图形数据: 1 1 public static int CreatePoint(string featureClassName, SCoordinates sCoord, string[] sde=null) 2 2 { 3 3 4 4 if (pFeatureWorkspace == null) 5 5 ConnectSDE(sde); 6 6 OpenFeatureSet(sde); 7 7 IFeatureClass pFeat... 阅读全文
posted @ 2011-09-25 17:42 iskyoole 阅读(3411) 评论(0) 推荐(0) 编辑
摘要: 之前在公司安装arcsde10的时候一直很顺利,没遇到什么问题。回到家后,想搭建arcgis的环境来更好的学习,在安装arcsde10的时候却遇到了一个以前一直没遇到的问题,困扰了很久。在网上也找了一些网友的回答,问题依旧。重新打开arcsde的安装文件,里面有对应数据库的安装想选项,突然想到是不是数据库oracle版本和arcgis版本不兼容?本人安装的是arcgis10,数据库oracle版本也是10,这就有点让人想不明白了。。。后来想了一下,数据库oracle10还有几个分支版本:10.1.0和10.2.0之前自己安装的一直是10.1,会不会是要安装10.2呢,想想在公司安装的数据库版本 阅读全文
posted @ 2011-09-25 15:04 iskyoole 阅读(838) 评论(0) 推荐(0) 编辑
摘要: 一直想写些东西,记录下自己学习的过程,却一直没去写。要开始写了,期待与大家的分享。。。 阅读全文
posted @ 2011-09-24 00:05 iskyoole 阅读(130) 评论(0) 推荐(0) 编辑