设计模式:简单工厂和工厂方法的C#实现

设计模式中工厂方法包括了:简单工厂,工厂方法和抽象工厂,下面给出简单工厂和工厂方法的C#实现,你可以直接拷贝运行。 namespace Factory.Design.Pattern { class Program { static void Main(string[] args) { //设计模式之简单工厂 //LightSimpleFactory lsf = new LightSimpleFactory(); //Light lsb= lsf.Create("Blue"); //Light lsr = lsf.Create("Red"); //lsb.TurnOn(); //lsr.TurnOn(); //设计模式之工厂方法 CreatorMethod cb = new BlueCreator(); CreatorMethod cr = new RedCreator(); Light lb = cb.factory(); Light lr = cr.factory(); lb.TurnOn(); lr.TurnOn(); Console.ReadKey(); } } public abstract class Light { public abstract void TurnOn(); } public class BlueLight : Light { public override void TurnOn() { Console.WriteLine("Blue Light is turn on!"); } } public class RedLight : Light { public override void TurnOn() { Console.WriteLine("Red Light is turn on!"); } } #region 简单工厂 public class LightSimpleFactory { public Light Create(string LightType) { switch (LightType) { case "Blue": { return new BlueLight(); } case "Red": { return new RedLight(); } default: { return null; } } } } #endregion #region 工厂方法 public abstract class CreatorMethod { public abstract Light factory(); } public class BlueCreator : CreatorMethod { public override Light factory() { return new BlueLight(); } } public class RedCreator : CreatorMethod { public override Light factory() { return new RedLight(); } } #endregion }

May 21, 2009

面向对象思想研究心得体会

封装、继承、多态,这三个是面向对象最重要的概念,抽象则是灵魂与核心。但是真正的面向对象决不是通过简单的继承、通过实现简单的多态来实现的,面向对象的核心在于它的几个指导原则(单一职责原则,接口隔离原则,依赖倒置原则,Liskov原则,开发封闭原则)下设计出相互作用的类。 面向对象还有两个特别的名词:类,对象。类与类之间的相关联系(聚合、泛化、依赖、关联),对象与对象之间的转换关系,这两者是真正考验一个人面向对象设计能力的指标。 在一个面向对象系统中,大量的类在一起,它们不可能都没有相互关系,如果这样的话就无法完成优秀的面向对象设计架构。在C#中,对象与之间的关系,主要在于处理好父类对象和之类对象之间的引用关系。 1、单一职责原则:一个类,最好只做一件事,只有一个引起它变化的原因; 2、开放封闭原则:软件实体应该是可扩展,而不可修改的。也就是说扩展是开放的,修改是封闭的; 3、依赖倒置原则:依赖于抽象,而不是依赖与具体; 4、接口隔离原则:使用多个小的专门的接口,而不要使用一个大的总接口; 5、Liskov原则:子类必须能够替换其基类。 以上这五个原则在面向对象设计中非常关键,只有灵活地运用了才可以真正地掌握好面向对象思想。

May 21, 2009

数学与应用数学专业介绍,顺便给数学院学生的建议

数学与应用数学专业是一个已经开设了很久的专业,国家教育部在这个学科的教育研究上积累了很多极为宝贵的经验,大学在上个世纪五十年代就开设了数学与应用数学专业,在培养人才上有很丰富的经验,在科研上也取得许多优秀的成果,现在该专业已经成功获得了设立博士点的资格。 数学与应用数学专业是一个厚基础、宽口径并注重一定工程实践训练的理科专业,设置有应用数学与应用软件专业、计算数学与应用软件专业两个方向。本专业的学生主要学习数学与应用数学的基础理论、基本方法,受到数学模型、计算机和应用软件方面的基本训练,具有较好的科学素养。数学与应用数学专业开设了大量的数学课程和跟软件开发的相关课程,这些课程都由优秀的教授来上课。 大一学习最重要最基础的数学专业基础课,任课教师水平都很高,这些课程直接请博士生导师(至少是硕士生导师)上课,教学质量相当高;大二开设学习数学专业课程,最主要的有三门专业必修课:数学模型、运筹学和数学软件,前两门课程对培养学生应用数学能力和很大的帮助,后一门课程让学生懂得利用强大的数学软件去解决应用问题,还有其他一些课程是专业基础课程,对学生未来学习作用非常大;大三主要是专业选修课,学生可以根据自己的需要和自己的人生规划来选择这些课程,如果以后想从事软件开发的可以多选计算机软件开发相关的课程,如果想读研究生或者以后从事科研可以多选数学相关的课程。大四还有一些专业选修课(如何选择跟大三的原则一样),另外还有一个很重要的任务,就是做毕业设计。 学生在大二的时候还可以参加目前全国最大的大学生课外科技竞赛–全国数学建模比赛,这是一项将数学知识直接应用到实际问题的比赛,参与者可以得到各方面的训练,对未来的发展有非常大的作用,用参加过的前辈们的话就是“一次参加,终岁受益”,而且获得全国奖的可以免试保送研究生,大学在数学建模比赛成绩也是非常好的,每年都有好几个队获全国奖。 目前大学本科正在越来越注重基础教育,许多家长希望自己的孩子本科毕业后继续就读研究生。如果在大学本科阶段把数学与应用数学专业学好了,也就是把研究生(除了数学专业)课程中的数学专业都学好了,在读研或者进行更高的深造的时候非常轻松。所以现在一些有见识的家长都选择让自己的孩子在本科阶段先读数学与应用数学,把基础打好。现在大学里很多非数学院的导师都希望数学院的学生报考他们的研究生,也非常欢迎数学专业的学生在读研究生的时候在他们院读。 即使不想读研究生,数学与应用数学专业也是一个很值得选择的专业,因为这个专业和计算机联系非常密切,本专业开设的关于计算机软件方面的课程和计算机专业基本一样(可能比计算机专业还多),学生通过数学思维的训练和熏陶之后从事软件开发是非常有前途的,目前在计算机应用领域中很强的人要么都是应用数学系毕业或者数学功底非常好的人。就算不从事软件开发,通过本专业的培养,可以很大地提高学生在工作后的后劲力,因为大学阶段已经把实际中常用到的几乎所有数学理论都疏通了,实际工作遇到的话应付起来就得心应手了。 当然本专业有一个特点就是开设课程比较多,学习也比较困难,但这并不影响学好这个专业。在大学,有优秀的教师和丰富的图书馆资源,如果脚踏实地跟老师好好学习,是几乎每个人都可以学好的(用老师的话说:以能考上大学的人的智商都可以学好)。来到数学学院,来到数学与应用数学专业后,找到自己的定位,发现自己的热爱,然后踏踏实实把每一个步走稳,毕业的时候,你就会发现自己真的实现人生理想了。

May 21, 2008

数学史上孤独而伟大的数学家们

“这群孤独的人,他们在黑暗中探索,他们拔开笼罩在人类人类头上的迷雾,让真理的阳光照进人类的心灵。” “你是否知道,一千八百年前,一个伟大的希腊数学家构建起完美的圆锥曲线理论,曾经被人遗忘在历史角落。然而在近代科学的发展中,它成了行星运动理论的基础。” “也许你不知道加罗华、阿贝尔这两个名字,他们是数学王国里英年早逝的天才。在他们的时代里他们的伟大理论没有得到别人的认可,但是谁会知道,它们是现代数学的根基和量子物理学的理论基础。” “拉马努扬,一个生被贫困纠缠的传奇数学家,在印度那个小小的村庄里写下了一个一个轰动数学界的公式、定理。” “非欧几何的创立者之一,亚.鲍耶,因为追求自己的理论被作为数学家的父亲赶出家门,却依然不放弃。” “我们完全有理由相信,人类智慧碰撞出来的火花终有一天会将世界燃起。” “我们不应该忘记他们的名字,更不能忘记他们的精神。”

May 21, 2008

为基础数学而写:关于基础数学的若干想法

从数学分析、高等代数、解析几何走来,经过常微分方程、复变函数的洗礼,正在实变函数、抽象代数、概率论中摸索,还将走向数论、拓扑学、泛函分析。这一路上经历了太多的彷徨,但是我最终还是不愿放弃这些优美的符号和公式。 数学分析,这门被称为数学系最重要最基础也是最容易学的课程,先建立了无懈可击的实数理论,然后引出严密的极限理论,进而是连续、导数、微分积分等概念,再向多维、向更抽象的函数概念出发,最后结成这门课程丰硕的成果。 高等代数,数学高度抽象性的典型代表,代数方程、多项式、向量、矩阵、线形空间、线形变换、欧氏空间、辛空间等等这些字眼中还包括更加抽象的概念。但是前人们找到了研究它们的方法,代数方程的根、矩阵性质、不变子空间、商空间,把握了这四个东西就好了。 解析几何,数形结合的经典,忘不了的是用向量法和坐标法来研究几何,最让我难忘的是引入坐标变换法将二次曲面问题归为一个方程来研究,特别是只用短短几页书把高中的解析几何讲完了。 常微分方程,作为数学科学中永远不会衰竭的领域,微分方程无处不在。方程模型、解析解、数值解、稳定性分析,这是研究它的模式。 复变函数,又称解析函数论,工程运用必不可少的工具,从复数的实部虚部之间的关系找到一类有良好性质的函数,然后去研究它们得到许多深刻的定理,便创造了一门漂亮的学科。拉普拉斯变换、留数、黎曼猜想光彩照人。 实变函数,建立在公理侧度理论上的微积分,以勒贝格积分为基础,引出了这门号称最难学的课程(数学系的学生都认为是“天书”),现在还在学习中。 抽象代数,这门由女数学家埃米.诺特建立起来的理论,研究群、环、域,现在还在学习中。 概率论,数理统计的基础,随即事件的数学化,研究随即现象的规律性,现在还在学习中。 数论、拓扑学、泛函分析还等待着我去领略它们的精妙。

May 21, 2007

为应用数学而写:关于应用数学的若干想法

应用数学主要就是三大块:统计、优化和数值分析。 数学模型,交给我了建模的思想和方法,特别让我知道了如何将数学理论实际化,数学建模给予我的是太多太多,一言难尽。 数学软件,Matlab几乎是无法超越的,数值计算的老大;Mathematica也不甘落后,符号计算的强者;SPSS是统计软件中正在称霸天下的霸主。数软节省了我的很多时间,并且交我要另外一种角度思考数学。 运筹学,优化计算是实际中必不可少的,并且带来的就是经济收益。线形规划、非线性规划、动态规划、网络计划图、库存论、排队论等都是经典理论。 数值分析:科学与工程计算的基础,在韩旭里老师这位计算数学“牛人”的指导下,现在正在学习中。 多元统计分析:自然科学与社会科学比不可少的分析工具,拥有了这个工具,再大的海量数据也可以找到眉目. 另外还有数值计算三大非经典算法:模拟退火算法、遗传算法、神经网络算法,为鲁莽计算提供了方法;以及图论、科学与工程计算、数据挖掘应用数学分支,下一学年即将学习。 应用数学,现在学得都还很肤浅,所以未来两年的任务就是这方面了。

May 21, 2007

数学建模比赛之后的感想

作为数学院的一员,像其他很多有梦想有激情的同学一样,刚刚来到大学的时候,我也是怀着自己半成熟的激情和梦想,在一片掌声走进大学的校门。来到一个新的环境,新奇、激动,那种心理是只有新生才可以体会的。当慢慢静下心来,在匆匆的、缓慢的、平静的、热烈的大学校园里,我选择做一个观看者,同时也在寻找自己大学的立足点。看着很多同学进学生会我也蠢蠢欲动,看着别人加入某某协会我也想加入进去,看着大家努力地学习我也背着书包往自习室图书馆跑...... 在经历了一段时间的大学生活的洗涤后,经过自己的漫漫寻求,我遇到了数学建模,我兴奋,怀着饱满的热情,我全力投入,我为她通宵达旦,为她成为图书馆的常客、成为数模论坛的网虫......为她我投入了是很多很多,一步一步摸索,向前辈学习,和同学(我的同班同学小蔡)讨论,然后慢慢地走进了数模的世界。于是我真的找到了自己大学的热爱,并且她真的给了我很多,在学习中我掌握了网上快速收集资料的能力,包括在Google、Baidu、论坛、网页;在准备数模的过程中,我看到了应用数学的重要性,更看到了计算机软件在数学的强大作用,Mathlab、Mathematica、Maple、Lingo无疑是延长数学工作者寿命的良方、是搞科研的强有力工具;在参与数模中我学会了队员之间的团结协作,懂得了什么叫团队,而且更重要的是我的人生画下了重重的一笔,因为国赛那三天三夜的全力投入中我只睡了八个小时,而且也挺了过来,在美赛的那四天四夜我带领队友走过一道道坎,在想要放弃的时候走出低谷,打开路子......数模结束了,但是对我来说又是一个开始,对于参赛的队员也是如此,不管是否获奖,结束后都是一个新的旅程。 在我探索数模的过程中,我多么希望有一群人在一起讨论,有人给我提示和解读数模。我是有想法就要尽力实现的人,所有决定在自己参加数模之后组织数模的热爱者,创立我们自己的组织,并且要传承下去,让后来者能够获得益处。于是有了今天的这份策划,希望参与过的和想参与的人员加入进来,这里是参赛过的队员实现自己梦想的又一个天地,这里是没有参加过数模的人的起点。 “一次参与,终生受益”这不是我自己说的,这是中国科技大学的第一、二批参赛过的队员的获奖感言中提出来的,而后来者,每每问到参加数模最大感想是什么,他们都说:一次参赛,终生受益。 年轻是资本,但我们不能挥霍,梦想需要有承载她的东西,加入我们吧,不管现在人家怎么评论数模,说她变质,说她没有能反映能力,但是请记住:这是连续几年国内最大课外科技竞赛活动、参与者逐年上升、她的获奖排名是大学排名的专项指标、几乎每个高校都为获奖者提供很多机会继续深造,而最重要的是:在你参与的过程中,你已经学到了极为价值的东西(只要你是抱着学习的心态,当然获奖是每个人的目标)。作为过来人,我可以保证,只要你用心投入,真正去体会数模的真谛,在这里你一定可以放飞你的理想,当你参与进来,并且坚持到最后的时候,回头看看自己走过的路,你会发现你已经成功了。

May 21, 2007

读《深入浅出MFC》和设计模式有感

这个学期开学初是进入大学最黑暗的时候,在打击后,我还是老老实实看书,图书馆已经是我的乐园。三月份过来,把《深入浅出MFC》和《设计模式》(就是美国“四人帮”写的那本)都通读了一遍,期间读了许多关于面向对象方法、分析和设计的书,就如我同学说的一样,“我发现了新的天地”。 软件设计,我最终还是选择了,其实与其说是我选择,不如说是被迫的,或者可以用我的话说是“抵制不住市场经济的诱惑”。但我知道我是为了自己的梦想,虽然已经不再是儿时的那个纯粹的梦想,但是这已经不重要了,因为真的是“理想如果不向实际做点妥协,理想就会归于尘土”,但我清楚现在最主要的还是如小熊说的“打扎实基础”。 读《深入浅出MFC》,感想很多,不想在这里谈什么体会(因为会是很粗陋的),还是引用书中打动自己的话以做些纪念: “ 程序设计领域里,每一个人都想飞; 但是,还没学会走之前,连跑都别想!” “ C++是一种扭转程序员思维模式的语言; 一个人思维模式的扭转,不可能轻而易举一蹴而就!” “ 如果MFC是箭, Visual C++ IDE(集成开发环境)便是弓, 强壮的弓,让箭飞得更远!” “ 只用一样东西,不明白它的道理,实在不高明。 演化(evolution)永远在进行, 这个世界却不是每天都有革命(revolution)发生, Application Framework在软件界确实称得上具有革命精神。” “ 带艺术气息的软件创作行为将在Application Framework出现后逐渐成为工匠技术, 而我们都将成为软件IC装配厂里的男工女工, 但,不是亨利.福特,我们有如何能够享受大众化的汽车, 或许以后会出现“纯手工精制”的软件, 可我自己从来不嫌机器馒头难吃!” “ 消息映射机制与命令传递, 活像是米若托斯的迷宫, 是MFC最曲折幽深的神秘地带!”

May 21, 2007