博文
个人觉得比较合适的学习网络编程一些基础知识的顺序(2010-06-18 15:36:00)
摘要:一HTML
二XHTML
三CSS
四JavaScript(客户端脚本)
五ASP(服务器端脚本)
六ASP.NET......
.NET设计模式(18):迭代器模式(Iterator Pattern)(二)(2010-06-09 14:16:00)
摘要:.NET中的Iterator模式
在.NET下实现Iterator模式,对于聚集接口和迭代器接口已经存在了,其中IEnumerator扮演的就是迭代器的角色,它的实现如下:
public interface IEumerator
{
object Current
{
get;
}
bool MoveNext();
void Reset();
}
属性Current返回当前集合中的元素,Reset()方法恢复初始化指向的位置,MoveNext()方法返回值true表示迭代器成功前进到集合中的下一个元素,返回值false表示已经位于集合的末尾。能够提供元素遍历的集合对象,在.Net中都实现了IEnumerator接口。
IEnumerable则扮演的就是抽象聚集的角色,只有一个GetEnumerator()方法,如果集合对象需要具备跌代遍历的功能,就必须实现该接口。
public interface IEnumerable
{
IEumerator GetEnumerator();
}
下面看一个在.NET1.1下的迭代器例子,Person类是一个可枚举的类。PersonsEnumerator类是一个枚举器类。这个例子来自于[url]http://www.theserverside.net/[/url],被我简单的改造了一下。
public class Persons : IEnumerable
.NET设计模式(18):迭代器模式(Iterator Pattern)(一)(2010-06-09 14:15:00)
摘要:概述
在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。
意图
提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。[GOF 《设计模式》]
结构图
生活中的例子
迭代器提供一种方法顺序访问一个集合对象中各个元素,而又不需要暴露该对象的内部表示。在早期的电视机中,一个拨盘用来改变频道。当改变频道时,需要手工转动拨盘移过每一个频道,而不论这个频道是否有信号。现在的电视机,使用[后一个]和[前一个]按钮。当按下[后一个]按钮时,将切换到下一个预置的频道。想象一下在陌生的城市中的旅店中看电视。当改变频道时,重要的不是几频道,而是节目内容。如果对一个频道的节目不感兴趣,那么可以换下一个频道,而不需要知道它是几频道。
Iterator模式解说
在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。下面看一个简单的示意性例子,类结构图如下:
首先有一个抽象的聚集,所谓的聚集就是就是数据的集合,可以循环去访问它。它只有一个方法GetIterator()让子类去实现,用来获得一个迭代器对象。
/**//// <summary>
/// 抽象聚集
/// </summary>
public&nb......
这是一道非常简单的选择题,据传,如果拿来问西方人,大多数人都会选对,但是如果拿来(2010-05-28 23:15:00)
摘要: 这是一道非常简单的选择题,据传,如果拿来问西方人,大多数人都会选对,但是如果拿来问我们自己中国人,大多数人都会选错。想知道为什么,请花一分钟,把这个故事看到最后:
上帝把两群羊放在草原上,一群在东,一群在西。上帝还给羊群找了两种天敌,一种是狮子,一种是狼。上帝对羊群说:“如果你们要狼,就给一只,任它随意咬你们。如果你们要狮子,就给两头,你们可以在两头狮子中任选一头,还可以随时更换。”
这道题的问题就是:如果你也在羊群中,你是选狼还是选狮子?
很容易做出选择吧?好吧,记住你的选择,接着往下看。
东边那群羊想,狮子比狼凶猛得多,还是要狼吧。于是,它们就要了一只狼。西边那群羊想,狮子虽然比狼凶猛得多,但我们有选择权,还是要狮子吧。于是,它们就要了两头狮子。
那只狼进了东边的羊群后,就开始吃羊。狼身体小,食量也小,一只羊够它吃几天了。这样羊群几天才被追杀一次。西边那群羊挑选了一头狮子,另一头则留在上帝那里。这头狮子进入羊群后,也开始吃羊。狮子不但比狼凶猛,而且食量惊人,每天都要吃一只羊。这样羊群就天天都要被追杀,惊恐万状。羊群赶紧请上帝换一头狮子。不料,上帝保管的那头狮子一直没有吃东西,正饥饿难耐,它扑进羊群,比前面那头狮子咬得更疯狂。羊群一天到晚只是逃命,连草都快吃不成了。
东边的羊群庆幸自己选对了天敌,又嘲笑西边的羊群没有眼光。西边的羊群非常后悔,向上帝大倒苦水,要求更换天敌,改要一只狼。上帝说:“天敌一旦确定,就不能更改,必须世代相随,你们唯一的权利是在两头狮子中选择。”
西边的羊群只好把两头狮子不断更换。可两头狮子同样凶残,换哪一头都比东边的羊群悲惨得多,它们索性不换了,让一头狮子吃得膘肥体壮,另一头狮子则饿得精瘦。眼看那头瘦狮子快要饿死了,羊群才请上帝换一头。
这头瘦狮子经过长时间的饥饿后,慢慢悟出了一个道理:自己虽然凶猛异常,一百只羊都不是对手,可是自己的命运是操纵在羊群手里的。羊群随时可以把自己送回上帝那里,让自己饱受饥饿的煎熬,甚至有可能饿死。想通这个道理后,......
JSON Study(2010-05-22 22:50:00)
摘要:http://www.json.org/json-zh.html 介绍 JSON
http://www.ibm.com/developerworks/cn/web/wa-lo-json/ JSON 入门指南
http://www.cnblogs.com/truly/archive/2006/12/31/608896.html 深入浅出JSON
http://json.codeplex.com/ Json.NET......
坚硬如水——我读《老子》之五(2010-05-19 21:32:00)
摘要:黄国荣
几年之前,战友阎连科写过一部长篇小说叫《坚硬如水》,当时看稿后,不甚完全明了他用此书名的寓意。今再读《老子》才解其意。书名源自《老子》的第七十八章。
天下莫柔弱于水,而攻坚强者莫之能胜,以其无以易之。①
老子说天下没有比水更柔弱的东西,而攻坚克强的能力却没有能胜过水的,因为没有什么东西能替代它。
守柔取弱是老子人生哲学的核心,老子在《道德经》五千言八十一章中,用了十章的篇幅论水和柔弱的品格。“守柔取弱”与“中庸之道”同是处世哲学,追求的方向却大不一样。
所谓中庸:喜怒哀乐之未发,谓之中;发而皆中节,谓之和。中也者,天下之大本也;和也者,天下之达道也。(《中庸》)中庸之道在这里被奉为修心养性的最高境界。
所谓守柔取弱,老子说:弱者道之用。(第四十章)他确认柔弱谦下是道的功能。
在此,我们不妨作一简单比较。中庸之道的核心是守中,不偏不倚,不上不下,不左不右,不前不后,不高不低。对两极端不露锋芒,不做任何一端的对立面,主张和为贵。其实这种抱着调和矛盾的入世态度是十分被动的,真正做到守中是很难的。孔子就说:道之不行,我知之矣;知者过之,愚者不及也。道之不明也,我知之矣;贤者过之,不肖者不及也。又说:道其不行矣夫!(《中庸》)孔子很清楚,中庸之道是很难施行的,聪明和贤能的人会做过了头;愚笨和小人做不到。
守柔取弱则是处下,甘居卑下,谦让退后。居下退让,并不是遁世,也不是厌世,更不是逃避。《道德经》中凡遇高下、强弱、刚柔、长短、贵贱、雄雌、智愚等取舍时,老子都主张取后者,处众人之所恶。这种表面看来消极的态度,其实是一种立场,守柔处下,实际是隐含挑战,是以逸待劳、后发制人的积极入世超凡脱俗的智慧。
老子的这一观点体现着唯物的辩证思维,是......
谋圣之谜(2010-05-19 21:30:00)
摘要:运筹帷幄决胜千里的谋略家张良
收秦关百二山河奇谋独运,
辅汉家统一事业成功不居。
欢迎光临紫柏山国家森林公园旅游论坛,赶快加入我们吧。; \! K8 o# }+ u5 [7 ]) v
& F: h2 n' D3 ?4 L3 o
$ ^2 {- p9 J. [0 q; o* h' p% h7 y——冯玉祥
公元前202年,刘邦打败所有的对手,建立了一个新的中央集权封建王朝——汉朝。这一天,志得意满的汉高祖刘邦在洛阳南宫宴请功臣。酒酣耳热之际,谈到自己得天下的原因,不无得意地说:“得失原因,主要在用人上。运筹帷幄之中,决胜千里之外,我不如张子房;镇国家,扶百姓,供粮饷,我不如萧何;统百万之众,战必胜,攻必克,我不如韩信。这三个人,都是人中英杰,而我能使用他们,所以取得天下。”
汉高祖所称道的张子房,就是汉朝“三杰之冠”、著名的谋略家张良。
一、欢迎光临紫柏山国家森林公园旅游论坛,赶快加入我们吧。6 Z4 r5 e7 @4 C- a: x! m
从博浪沙到下邳——张良的出身背景
公元前251年,张良出生于韩国城父(今安徽亳县东南,一说河南宝丰县李庄乡)一个贵族家庭。张良原姓姬,他的祖父曾任韩昭侯等三朝宰相,父亲也是两位韩王的宰相。公元前230年,韩国成为六国中第一个被秦灭掉的诸侯国。身为韩国贵族的张良,一心想为国复仇。
张良用尽家产,网罗高手刺杀秦始皇。经多方寻求,张良找到了一位大力士,并为这位大力士特意制定了一把重达120斤的大铁锥。
公元前218年,秦始皇第三次出巡。当秦始皇的车驾行驶到阳武博浪沙(今河南原阳县东南)一带时,埋伏在此的张良雇佣的刺客突然出手,将铁锥掷向秦始皇乘坐的车子。可惜铁锥没有打中秦始皇。秦始皇下令搜捕刺客,张良只好隐姓埋名,躲藏到下邳(今江苏睢宁县西北)。
张良躲在下邳时,传说他得到了一次奇遇:黄石老人亲授张良《太公兵法》。张良经受住黄石老人几次三番的考验,终于得到了黄石老人所授的《太公兵法》,并天天认真研读,仔细揣摩,希望能按照老人所说,“可以做王者之师。”
公元前209年7月,陈胜起义爆发。早有抗秦之志的张良立即聚集了100多名年轻人,前去留地(今江苏沛县东南)投奔已被拥立为楚王的景驹。半路上遇到了刘邦,二人兵合一处。张良时常......
张良——乱世中,斯人若水(2010-05-17 21:05:00)
摘要:张良的一生着实活的精彩。唐代诗人李白有诗:“子房未虎啸,破产不为家。沧海得壮士,椎秦博浪沙。报韩虽不成,天地皆振动。潜匿游下邳,岂曰非智勇。我来圯桥上,怀古钦英风。惟见碧流水,曾无黄石公。叹息此人去,萧条徐泗空。”表去不说李白当时怀念张良是什么样的心情,从诗中就可以看来张良对李白这样的侠士有着什么样的影响了。我不是侠士,但张良也是我的偶像。
他跃然于历史舞台之上便是以刺杀秦始皇这种方式的,一时间天下皆惊,张子房一举闻名。想来能在日后举大事之人少时必有过人之处,韩信可忍胯下之辱,陈平于家盗嫂受金,而张良忍亡国之恨,求力士击杀秦始皇。当年燕太子丹求得荆轲,渡易水向西以刺秦王。而这里张良不仅求得力士来刺杀秦始皇,而且他自己也是作为刺客埋伏于搏浪沙刺杀秦始皇的。刺杀不成能全身而退,普天之下,想必张良为史上第一人。荆轲只是刺客,在一击不成后,旋柱而走追击秦王,被断左股后尚能投以剑击之,勇者可敬。但是张良却是个奇才。击杀秦始皇不成,引得秦始皇大索天下,求贼甚急,张良他在如此情况之下,全身而退,辗转于世,最终可隐匿在下邳,过人之处,可见一斑。再者他刺杀秦始皇也是在谋划完备的情况下,在秦皇最不注意的时候,以最有利的方式来刺秦。后世有人称赞:“子房一椎,宇宙生色”。张良刺秦虽不成,但一击成名,其性格也展露无遗。他有情有义,对韩国忠心不二,以致后来他投身乱世也是为了光复韩国;他深谋远虑,性格坚忍,能够做最成分的准备,等待最佳的时机,以求一击成功;他镇静从容,能够在举大事时为自己留下后路,全身而退。自古义士多“眼花耳热后,意气素霓生”,而张良他始终能将心中的熊熊烈火放置在冷若冰霜的头脑中,年轻时期就可以如此成熟老道,熟谙诡道、脱身之术,堪称奇才。
他在下邳隐匿的十年是他成长并成熟的十年。巧遇黄石公,偶得《太公兵法》,使得张良精通纵横之法,诡道之术。关于此段张良拾鞋,黄石公授书的神话传说,并不足为信。但张良手中的又一本助他纵横天下的书却毋庸置疑。或许是他从某人某处得到,也或许本就是张良自己著书而借前人之名罢了。无论是哪种情况,张良因此变的更加强大和完善是可以肯定的。
遇见刘邦是他人生中的一个转折点。张良做事不拘于形式,以柔制刚,以强击弱,见缝插针,动其根本,又精通脱身之术,想来深受道家学派影响,熟谙黄老之术。而汉代罢黜百家,独尊儒术之前......
张良:绵软的剃刀(2010-05-17 21:04:00)
摘要:百炼钢与绕指柔
古之所谓豪杰之士者,必有过人之节。人情有所不能忍者,匹夫见辱,拔剑而起,挺身而斗,此不为勇也。天下有大勇者,猝然临之而不惊,无故加之而不怒,此其所挟持者甚大,而其志甚远也。——(苏轼《留侯论》)
此何人哉?留侯张良也。秦汉风云的幕后总导演张良也。
张良是刘邦的谋士,但我以为他只不过是躲在幕后,利用刘邦的力量来达到自己的目的:推翻暴秦,为韩报仇。和刘邦手下其他人不同,他与刘邦不像上下级关系,而像是合作关系。甚至,他比刘邦还高一级,他是孟子之后又一位自称“王者师”的人物。当刘邦做了皇帝后,张良就淡然隐退,“学辟谷,学道引,欲轻举”去了。
张良的出身与项羽有相似之处,都是六国贵族。据《史记》记载,张良的祖父和父亲在韩国连做了五代国相。到了张良,这位世家子弟还未来得及在政坛上展露身手,韩就被秦的铁骑踏平了。年轻气盛又自负其才的张良一下子被葬送了大好前程。自此,他也就在心中埋下了仇秦的种子。他与项羽一样,在秦末,都是一个复仇者。
韩破,良家僮三百人,弟死不葬,悉以家财求客刺秦王,为韩报仇……良尝学礼淮阳,东见仓海君。得力士,为铁椎重百二十斤。秦皇帝东游,良与客狙击秦皇帝博浪沙中,误中副车。
张良后来以处变不惊的“柔弱”著称。苏轼称这种气质为“大勇”。但在一开始,张良并不是这样的。当韩初亡,目睹血腥,他也是一个咬牙切齿的人物。如《史记》载,“悉以家财求客刺秦王”,是孤注,以百二十斤铁椎掷击秦始皇,是“一掷”,真正的“孤注一掷”。这与项羽在巨鹿之战中,“悉引兵渡河,皆沉船,破釜甑,烧庐舍”,不是如出一辙吗?
确实,张......
sql之left join、right join、inner join的区别(2010-05-14 16:49:00)
摘要:sql之left join、right join、inner join的区别
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
举例如下:
--------------------------------------------
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
--------------------------------------------
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.