摘要:
为什么许多有才华的人会失败?美国哈佛商学院MBA生涯发展中心主任詹姆士.华德普与提摩西.巴特勒博士,受命协助那些明明被看好却表现不佳,甚至快要被炒鱿鱼的主管。什么样的行为模式会成为致命缺陷,严重地阻碍职业生涯?华德普与巴特勒归纳出12项职场缺陷的行为模式。 1.总觉得自己不够好 这种人虽然聪明、有历练,但是一旦被提拔,反而毫无自信,觉得自己不胜任。此外,他没有往上爬的野心,总觉得自己的职位已... 阅读全文
摘要:
软件开发人员构成软件开发团队的基础,如果这个基础出现问题,那么整个开发团队将面临灾难。为了避免这种灾难的降临,除了技术本身的问题以外,需要软件开发人员具备如下4种能力:1. 角色定位能力:明确自身的任务和职责。应当能明确知道:(1)自己在项目中的具体任务和职责;(2)所承担的任务的具体时间表;(3)与自身作业密切相关的其他成员的作业内容以及相互影响程度;(4)作业报告的对象和报告内容。2. 协作支... 阅读全文
摘要:
[csharp] view plain copy 1.添加引用: Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载。关于它的操作我在“Aspose.Cells操作说明 中文版 下载 Aspose C# 导出Excel 实例”一文中的说。这里你暂时也可不理会它。) 即使没有安装office也能用噢,这是一个好强的大工具。 2.编写Excel操作类 us... 阅读全文
摘要:
最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问题,我就insert语句,sqldataadapter.update(dataset,tablename);sqlbulkcopy.WriteToServer(da 阅读全文
摘要:
C# .NET锁屏程序(顺带屏蔽任务管理器) 第一步:将窗体的FormBorderStyle设置为none,WindowState设为Maximized占据整个屏幕。第二步:使用钩子监控全局键盘事件。即屏蔽掉大部分系统热键。但是屏蔽ctrl+alt+del 任务管理器则较复杂,这个特例后面讨论。使用全局钩子应该注意的地方:将代码放到一个独立的类库里面(只有dll才能被注射到其他进程中)。view sourceprint?using System; using System.Collections.Generic; using System.Text; using System.Runtime. 阅读全文
摘要:
一、Remove Control Flag(移除控制标记)动机(Motivation)以break语句或return语句取代控制标记。示例view sourceprint?01public void CheckSecurity(string[] people) 02{ 03string found = string.Empty; 04for (int i = 0; i < people.Length; i++) 05{ 06if (found.Equals("")) 07{ 08if (people[i].Equals("Don")) 09{ 10 阅读全文
摘要:
一、Replace Type Code with Subclasses (以子类取代型别码)动机(Motivation)以一个subclass取代这个type code,如果面对的type code不会影响宿主类的行为,可以使用Replace Type Code with Class 来处理它们。但如果type code 会影响宿主类的行为,那么最好的办法就是借助多态(polymorphism)业处理 变化行为。示例view sourceprint?01public class Employee 02{ 03private int _type; 04public static int ENGI 阅读全文
摘要:
一、Duplicate Observed Data(复制[被监视数据])动机(Motivation)将该笔数据拷贝到一个domain object中。建立一个Observer模式,用以对domain object 和GUI object内的重复数据进行同步控制(sync)。示例步步为营 .NET 设计模式学习笔记 十二、Observer (观察者模式)二、Change Unidirectional Association to Bidirectional(将单向关联改为双向)动机(Motivation)添加一个反指针,并使修改函数(modifiers)能够同时更新两条连接。示例view sou 阅读全文
摘要:
一、Introduce Foreign Method(引入外加函数)动机(Motivation)在client class 中建立一个函数,并以一个server class实体作为第一引数(argument)。示例view sourceprint?1DateTime newStart = DateTime.Now.AddDays(1);改为view sourceprint?1public DateTime NextDate() 2{ 3return DateTime.Now.AddDays(1); 45}二、Introduce Local Extension(引入本地扩展)动机(Motivat 阅读全文
摘要:
一、Extract Class(提炼类)动机(Motivation)一个class应该是一个清楚的抽象(abstract),处理一些明确的责任。但在实际工作中,class会不断成长扩展。这个class会变得过份复杂,很快,class就会变成一团乱麻。示例view sourceprint?01public class Person 02{ 03private string _name; 04private string _officeAreaCode; 05private string _officeNumber; 0607public string Name 08{ 09get { retur 阅读全文
摘要:
Move Method概述程序中,有个函数与其所驻class之外的另一个class进行更多交流,调用后者或被后者调用动机(Motivation)如果一个class有太多行为,或如果一个class与另一个class有太多合作而形成高度耦合(highly coupled),我们就会搬移函数。通过这种手段,我们可以使系统中的classes更简单,这些classes最终也将更干净利落地实现系统交付的任务。示例view sourceprint?01public class MoveMethod 02{ 03private AccountType _type; 04private int _daysOve 阅读全文
摘要:
Replace Method with Method Object概述将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域(field),然后你可以在同一个对象中将这个大型函数分解为数个小型函数.动机(Motivation)小型函数优美动人,只要将相对独立的代码从大型函数中提炼出来,就可以大在提高代码的可读性.示例view sourceprint?1public int Gamma(int inputValue, int quantity, int yearToDate) 2{ 3int importantValue1 = inputValue * quantity + DateT 阅读全文
摘要:
Split Temporary Variable(剖解临时变量)概述程序中有某个临时变量被赋值超过一次,它既不是循环变量,也不是一个集用临时变量(collecting temporary variable)动机(Motivation)临时变量有各种不同用途,其中某些用途会很自然地导至临时变量被多次赋值.(循环变量)和(集用临时变量)就是两个典型例子:循环变量(loop variable)会随循环的每次运行而改变(例如 for(int i=0;i<10;i++))语句中的i);集用临时变量(collecting temporary variable)负责将(通过整个函数的运算)而构成的某个 阅读全文
摘要:
一、Inline Method概述一个函数,其本体(method body)应该与其名称(method name)同样清楚易懂.动机(Motivation)以简短的函数表现动作意图,这样会使代码更清晰易读.但有时候你会遇到某些函数.其内部代码和函数名称同样清晰易读.也可能你重构了该函数,使得其内容和其名称变得同样清晰.果真如此,你就应该去掉这个函数,直接使用其中代码,间接可能带来帮助,但非必要的间接性总是让人不舒服.作法(Mechanics)1、检查函数,确定它不具多态性(is not ploymorphic)如果subclass继承了这个函数,就不要将此函数inline化。因为subclas 阅读全文
摘要:
动机(Motivation)Extract Method是我们最常用的重构手法之一.当我们看见一个过长的函数或一段需要注释才能让人理解用途的代码,我们就会将这段代码放进一个独立函数中.有数个原因造成我们喜欢简短而有良好命名的函数.首先,如果每个函数的粒度都很小(finely grained),那么函数之间彼此复用的机会就更大;其次,这会使高层函数代码读起来就像一系列注释;再者,如果函数都是细粒度,那么函数的覆写(override)也会更容易些.的确,如果你习惯看人型函数,恐怕需要一段时间才能适应这种新风格.而且只有当你能给小型函数很好地命名时,它们才能真正起到作用,所以你需要在函数名称下点功夫 阅读全文
摘要:
最近在学习代码重构,根据自己的学习进度写一个关于代码重构的系列出来,供自己总结提高,也希望能对他人有所帮助。园子里有圣殿骑士的31 天重构学习笔记 给了我很多的启发,自己也在学习《Refactoring improving the Designe of Existing Code》(重构 改善既有代码的设计),希望在代码重构思想上能有自己的心得. 一、为什么要重构(Refactoring) 通过重构可以达到以下的目标: 1·持续偏纠和改进软件设计 重构和设计是相辅相成的,它和设计彼此互补。有了重构,你仍然必须做预先的设计,但是不必是最优的设计,只需要一个合理的解决方案就够了,如果没有 阅读全文
摘要:
概述在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?提供一种封装机制来隔离出“这个易变对象”的变化,从而保持系统中“其它依赖该对象的对象”不随着需求的改变而改变?这就是要说的Factory Method模式了。意图定义一个用户创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。结构图角色说明:抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。具体工厂(Concrete Creat 阅读全文
摘要:
概述在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。意图 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。结构图角色说明:AbstractExpression: - 声明一个抽象的Interpret方法,抽象语法树中所有的节点都必须实现该抽象方法。TerminalExpression:- 实现和语法中末端符号相关的Interpret方法。- 在每个句子的末 阅读全文
摘要:
概述在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性。意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。结构图角色说明:Memento(备忘录):保存Originator对象的内部状态(主动权在Originator),提供宽接口给Originator,提供窄接口给CareTaker。 Originator(原发器): 阅读全文
摘要:
概述表示一个作用于某对象结构中的元素操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作,它把数据结构和作用于结构上的操作之间的耦合性解脱开,使的操作结合可以相对自由地演化。优点是增加新的操作很容易,因为增加一个新的操作就意味着增加一个新的访问者,访问者模式将有关的行为集中到一个访问对象中。意图 实现通过统一的接口访问不同类型元素的操作,并且通过这个接口可以增加新的操作而不改变元素的类。结构图角色说明:访问者角色(Visitor):为该对象结构中具体元素角色声明一个访问操作接口。该操作接口的名字和参数标识了发送访问请求给具体访问者的具体元素角色。这样访问者就可以通过该元素角色的特 阅读全文
摘要:
概述在软件构建过程中,经常会出现多个对象互相关联交互的情况, 对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。 在这种情况下,我们可使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。 意图 用一个中介对象来封装一系列的对象交互。 中介者使各对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。结构图角色说明:Mediator:抽象调停者角色,它定义出同事对象到调停者对象得接口,这个角色一般由Java抽象类实现 ConcreteMediator:具体调停者模式,从抽象调 阅读全文
摘要:
概述在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少地带来请求发送者与接受者的紧耦合。 如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行时决定来处理请求,从而使两者解耦。意图责任链模式是一种对象的行为模式【GOF95】。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。结构图抽象处理者(Handler)角色:定义出一 阅读全文
摘要:
概述变化一直以来都是软件设计的永恒话题,在XP编程中提倡拥抱变化,积极应对。如何更好的去抓住变化点,应对变化?如何更好的提高代码复用?通过学习Template Method模式,您应该有一个新的认识。意图定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。[-GOF《设计模式》]结构图图1 Template Method 模式结构图生活中的例子模板方法定义了一个操作中算法的骨架,而将一些步骤延迟到子类中。房屋建筑师在开发新项目时会使用模板方法。一个典型的规划包括一些建筑平面图,每个平面图体现了不同部 阅读全文
摘要:
概述面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题。但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价。那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作?意图运用共享技术有效地支持大量细粒度的对象。[GOF 《设计模式》]结构图1.单纯享元模式的结构在单纯享元模式中,所有的享元对象都是可以共享的。单纯享元模式所涉及的角色如下:抽象享元(Flyweight)角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口。那些需要外蕴状态(External State)的操作可以通过调用商业方法以参数形式传入。具体享元(Co 阅读全文
摘要:
概述 在软件开发系统中,客户程序经常会与复杂系统的内部子系统之间产生耦合,而导致客户程序随着子系统的变化而变化。那么如何简化客户程序与子系统之间的交互接口?如何将复杂系统的内部子系统与客户程序之间的依赖解耦?这就是要说的Façade 模式。重新进行类的设计,将原来分散在源码中的类/结构及方法重新组合,形成新的、统一的接口,供上层应用使用。 Facade所面对的往往是多个类或其它程序单元,通过重新组合各类及程序单元,对外提供统一的接口/界面。意图为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[GOF 《设计模式》]示意图 阅读全文
摘要:
概述组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。描述Composite模式的最佳方式莫过于树形图。从抽象类或接口为根节点开始,然后生枝发芽,以形成树枝节点和叶结点。因此,Composite模式通常用来描述部分与整体之间的关系,而通过根节点对该结构的抽象,使得客户端可以将单元素节点与复合元素节点作为相同的对象来看待。意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。[GOF 《设计模式》 阅读全文
摘要:
概述 在软件系统中,有时候我们会使用继承来扩展对象的功能,但是由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”所导致的影响将为最低?这就是本文要讲的Decorator模式。 一个场景是我们要为一个对象动态添加新的职责,这个职责并不修改原有的行为,而是在原有行为基础上添加新的功能,就好比装饰工人为一座新居的墙上涂抹上色彩缤纷的颜料一般。 意图 动态地给一个对象添加一些额外的 阅读全文
摘要:
概述在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。桥梁模式是一个非常有用的模式,也是比较复杂的一个模式。熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CARP)都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。意图将抽象部分与实现部分分离,使它们都可以独立的变化。[GOF 《设计模式》],这里的抽象和实现并不一定是同一层次的概念,例如 阅读全文
摘要:
概述在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据。面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责。Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。为什么要写但现在C#的Foreach in己经替代了迭代器模式的功能,但是作为学习设计模式来说,还是很有好处的.意图提供一种方法顺序访问一个聚合 阅读全文
摘要:
概述在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出相应的改变。做到这一点的设计方案有很多,但是为了使系统能够易于复用,应该选择低耦合度的设计方案。减少对象之间的耦合有利于系统的复用,但是同时设计师需要使这些低耦合度的对象之间能够维持行动的协调一致,保证高度的协作(Collab 阅读全文
摘要:
概述在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。本文通过现实汽车生产中的例子,来诠释建造者模式。意图将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。<Design Pattern>Builder模型图通俗讲解:Builder模式的理解 建造者(Builder 阅读全文
摘要:
概述在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。这就是本文要说的Command模式。意图将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。[GOF 《设计模式》]结构图<Design Pattern>Command模式结构图如下:图1 Command模式结构图西游记中例子:玉帝传美猴王上天 命令 阅读全文
摘要:
概述允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。意图 状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。 当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可以考虑使用状态模式了。 <Design Pattern>State模式结构图 示例关系图 描述: 一年有12个月,有四个季度,每个月都有一属于一个季度,根据月份得到这个季度的天气信息.可以用State模式来实现. 关系图: 代码设计:先创建接口IQuarter.cs:vie 阅读全文
摘要:
概述在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切。这就是本文要说的Proxy模式。意图代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 代理模式的英文叫做Proxy或Surrogate,中文都可译成"代理"。所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作 阅读全文
摘要:
概述 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter 模式。 意图 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 结构图 图1 类的Adapter模式结构图 图2 对象的Adapter模式结构图 生活中的例子 适配器模式允许将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以 阅读全文
摘要:
概述 在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适。那么如何封装这种动态的变化?从而使依赖于这些易变对象的客户程序不随着产品类变化? 意图 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象” ,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?<Design Pattern>示例图 阅读全文
摘要:
概述Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?客户程序在调用某一个类时,它是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。 从另一个角度来说,Singleton模式其实也是一种职责型模式。因为我们创建了一个对象,这个对象扮演了独一无二的角色,在这个单独的对象实例中,它集中了它所属类的所有权力,同时它也肩负了行使这种权力的职责! 意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 模型图 逻辑模型图:物理模型图:<De 阅读全文
摘要:
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.) Context(应用场景): 1、需要使用ConcreteStrategy提供的算法。 2、 内部维护一个St 阅读全文
摘要:
我们以一个线程例子来说明下抽象工厂是如何工作的.平时我们都会收发邮件,那我们就做个邮件引擎线程. 定义: 抽象工厂模式是一种创建型的模式。上面的比喻说明了抽象工厂就是生产同一个系列产品的东西,因为这一系列的产品是关联的,如果混用就可能出问题,所以就统一的在抽象工厂中进行创建。当要增加一个新的产品系列时,就多写一个工厂子类并添加相应的产品子类就可以了。 我们来看一个类图。 图中,我们可以看到,客户需要得到某系列的产品的时候,直接用相应的工厂子类来创建产品就可以了。示例用例图接来下我们设计个邮件发送的线程实例,先看用例图:代码设计首先创建一个接口ISaaSProcess.cs:view sourc 阅读全文
摘要:
园子里讲设计模式的太多了,最近我也在学设计模式,把我自己练的一些代码整理下,写个.NET设计模式学习笔记来让自己在设计模式的功底更深一层。记得金庸小说里风清扬教令狐冲的时候,说过独孤九剑的总纲,无招胜有招,其实设计模式中也有这种总纲,那便是 ?Identify the aspects of your application that vary and separate them from what stays the same.(找到系统中变化的部分,将变化的部分同其它稳定的部分隔开)。而我就有泡妞二十三招比喻设计模式的二十三种模设的开篇吧,作为大家茶余饭后的笑资。 1、ABSTRACT FA 阅读全文
摘要:
设计模式我从开篇到23种设计模式的讲解总共花了进两个月的时间,其间有很多读者给我提出了很好的建议,同时也指出了我的不足,对此我表示感谢,正是由于很多读者的支持我才能坚持的写到最后.在此表示我真诚的谢意. 系列导航步步为营 .NET 设计模式学习笔记 一、开篇(设计模式之泡妞二十三招)步步为营 .NET 设计模式学习笔记 二、Abstract Factory(抽象工厂)步步为营 .NET 设计模式学习笔记 三、Strategy(策略模式)步步为营 .NET 设计模式学习笔记 四、Singleton(单例模式)步步为营 .NET 设计模式学习笔记 五、Prototype(原型模式)步步为营 .NE 阅读全文
摘要:
Web服务器及客户端软件推荐服务器配置 2010-02-26 11:10:42 阅读11 评论0 字号:大中小订阅 1.Arp防火墙 – Arp Firewall 现在托管服务器必须安装的第一个软件就是Arp防火墙,没办法啊,中国这网络环境,不安装Arp防火墙就等着被人挂木马了。现在免费的Arp防火墙主要有两款,一个是奇虎的360 Arp防火墙,一个是金山Arp防火墙。 2.远程桌面连接 -Remote Desktop 远程桌面连接(以前称为“终端服务客户端”)主要是用于对远程托管的服务器进行远程管理,使用非常方便,就如同操作本地电脑一样方便。远程服务器端必须要 先安装“远程桌面连接”的服务器 阅读全文