`
禹爸爸
  • 浏览: 86314 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论
文章列表
CodeIgniter作为一款优秀的PHP开源框架,提供了相当丰富的类库供编程人员使用,这其中也包括对日历进行处理的Calendar Class。 Claendar Class能够帮助我们动态的创建日历,支持使用模板对其进行样式化以便给提供更好的用户体验,还能够对日历中的日期单元格进行链接设置。 在使用Calendar Class之前,需要使用 $this->load->library('calendar'); 之后就可以使用$this->calendar对其进行操作。 $this->load->library('calendar'); $ ...
在实际的工作中偶尔会遇到如下情况:让一个类继承架构的对象实体能够通过一致的方法执行另外一个目标类对象的方法或是独立的函数,目标类需要被执行的方法或是独立的函数可以自由地改变或是增加而会影响执行类的架构。这个时候就会用到ForEach设计模式。 ForEach模式的目的是让拥有稳定继承架构的类对象能够执行外部可变化的方法或是函数。它适用于以下两种情况: 如果应用系统中已经有一个稳定的继承架构,而这个类架构须加入新的方法或是需要执行一些方法,但是我们并不想改变继承架构或是修改类声明,以避免经常重新编译或是造成很脆弱的继承架构 一个Collection对象需要对其子项执行许多会改变的函数,而 ...
前几天在CSDN社区看到一篇《如何得到自身单元名称》的帖子,其中一位名为sdzeng网友给出了答案。受此启发,自己写了一个函数,用来获取指定类的所有祖先类的名称及其所在的单元名称。 //参数说明://AClass:需要获取祖先类的类//ASeries:是一个字符串列表,用来存放返回的祖先类及其所在单元的名称procedureGetInheritanceSeries(AClass:TClass;outASeries:TStringList);varPTD:PTypeData;PTI:PTypeInfo;
在面向对象的程序设计中,某一功能的实现往往是依赖多个类的协同工作,这当中不必可避免的会有一个核心的关键类,非关键类对关键类的依赖程度比较高(耦合比较紧),关键类的变动会景响到非关键类与其通信。比如在某个MIS系统中,用户数据是存储在文件中的,那么所有数据的读取与保存都依赖与那和与文件进行通信的类。突然某一天客户说要将数据存储到数据库中,那么我们是必要找出所有使用这些与文件通信的类的代码,并使用新写的与数据库通信的类将其替换掉。这个改动量是可想而知的。那么有没有一种好的设计模式能够降低这种情况下的代码改动量呢? 答案是肯定的。使用工厂模式。我们可以定义一个工厂类,提供一系列的创造对象的方法,代 ...
工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合。要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程。在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完全不相关的部分中也有可能出现级联破坏。 该问题在于紧密耦合 。系统某个部分中的函数和类严重依赖于系统的其他部分中函数和类的行为和结构。您需要一组模式,使这些类能够相互通信,但不希望将它们紧密绑定在一起,以避免出现联锁。 在大型系统中,许多代码依赖于少数几个关键类。需要更改这些类时,可能会出现困难。例如,假设您有一个从文件读取的 User 类。您希望将其更改为从数据库读取的其他类,但是,所有的 ...
在传统方法学里有两大分支 ---- 面向过程方法学和面向对象方法学。随着软件技术的发展,面向对象方法学的好外日益彰显,支持面向对象开发的开发工具也如雨后春笋般的涌向世面,C++、C#、Java、Delphi等等多不胜数。好多程序员朋友也跟随潮流,学习和使用这些开发工具(包括曾经的我)。工具换了,但开发思想却没有更换,或者说是没有发生太大的变化,只不过是使用面向对象的工具进行着面向过程的开发工作。追其原因之根本,遂发现主要是没能够很好的了解和掌握面向对象方法学之精髓。 面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与 ...
利用TypInfo单元的GetEnumName和GetEnumValue可以遍历任意枚举类型,并获取其名称和值。下面是示例Demo。 procedureTForm1.btnTestClick(Sender:TObject);varp:PTypeData;i:Integer;s:String;pt:PTypeInfo;beginListBox1.Items.Clear;pt:=TypeInfo(TWindowState);ifpt.Kind<>tkEnumerationthenbeginShowMessage('
学习过设计模式的人都知道有一种行为模式叫做Command模式。在Delphi的VCL Framework中也使用到了这种模式,那就是Action模式。 命令模式使用的目的在于使用对象来封装客户端的请求命令,由于使用以对象封装,因此可以达到下面的效果: 请求对象可结合多态以及虚拟方法来提供更大的弹性; 负责执行请求的目的对象可以和客户端分离,这就表示多个客户端可以发生相同的请求对象,例如菜单或是工具栏按钮都可以发生打开文件的请求,如此一来菜单和工具栏按钮便可以使用相同的请求对象,而负责打开文件的程序代码并不会绑定到单一的菜单项或是工具栏按钮; 由于使用了请求对象,因此不单是图形用户界面 ...
在Delphi中进行UI设计时,我们会在Form上放置许多的组件,当我们更改窗体的某些属性时,其上所有组件的相应属性都会随着发生改变,这是如何实现的呢?这里就使用到了Delphi VCL Framework中使用最多的一种设计模式 -- Notify模式。 Notify模式最经常发生的应用就是在容器类中的应用。由于容器类管理了许多子类对象,因此客户程序代码可能希望一次操作对所有容器类管理的子类对象进行特定的工作。在这种需求应用中就可以使用Notify模式,客户程序代码只需要传送事件给容器类,而容器类在接收到这个事件之后再逐一的通知它所管理的子类对象。 Delphi中所有组件都是从TComp ...
有许多程序员都喜欢使用TStringList类作为键值存储,这是不错的用法。但是TStringList本身只是对数据线性的存储,当数据量大时,对其检索效率极为低下。Delphi在在IniFiles单元中定义了另一个TStringList类,采用了哈希技术存储数据,它就是THashedStringList类。下面这段代码就是摘自IniFiles单元中对THashedStringList的定义。 THashedStringList=class(TStringList)privateFValueHash:TStringHash;FNameHash:TStringHash;FValueHash ...
有些程序员喜欢使用存储过程来实现一些数据的查询工作,如果客户端用户(这里是指使用这些存储过程的程序员)想对得到的结果进行筛选,目前没有简单的办法,但是可以利用临时表作为折中的办法。 CreateTable#TmpTable(FieldList)InsertInto#TmpTableExecStoreProcedureNameParameterList 需要指出创建临时表语句中的字段列表FeildList需要和存储过程返回的字段顺序一致;ParameterList是存储过程要用到的参数。执行完之后, 就可以使用Select语句对刚创建的临时表进行条件查询了。最后不要忘记删除掉临 ...
1.Excel数据导入 SELECT * FROM OpenDataSource( ’Microsoft.Jet.OLEDB.4.0’, ’Data Source="c:/test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0’)...[Sheet$] 2.Access数据导入 Select*FROMOpenDataSource'Microsoft.Jet.OLEDB.4.0','DataSource="c:/DB.mdb";UserID=Admin;Password=') ...
今天在整理以前写过的代码,发现有些函数还是挺实用的,决定将其贴到Blog上,与众多好友一起分享。 ...{********************************************************************************模块名称:公用函数库*编写人员:ChrisMao*编写日期:2004.10.30******************************************************************************}
继承是面向对象开发的的特点之一。良好的继承可以有效的降低代码冗余,提高代码复用。Delphi做为一款优秀的面向对象开发工具,在这一方面也不示弱。当我们在Delphi中新建一个窗体时,可以看到如下代码 typeTForm1=class(TForm)private...{Privatedeclarations}public
在PHP中,可以使用单引号或是双引号来定义一个字符串。在平常的使用中并没有细分这两种符号定义的字符串有什么区别。今天写了几行代码作为讲“传址赋值”的示例,在这段代码中同时使用了单引号和双引号定义字符串(请注意下面代码段中的第四行和第六行),执行过后却发生了奇妙的事情。 $var1="ChrisMao";//Assignthevalue"ChirsMao"to$var1$var2=&$var1;//Reference$var1via$var2echo'<b>Thevalueof$var2is:</b>',$var2, ...
Global site tag (gtag.js) - Google Analytics