随笔分类 - 设计模式
摘要:http://www.dofactory.com/Patterns/Patterns.aspx
阅读全文
摘要:历史:ExtremeProgramming(极限编程,简称XP)是由KentBeck在1996年提出的。KentBeck在九十年代初期与WardCunningham共事时,就一直共同探索着新的软件开发方法,希望能使软件开发更加简单而有效。Kent仔细地观察和分析了各种简化软件开发的前提条件、可能行以及面临的困难。1996年三月,Kent终于在为DaimlerChrysler所做的一个项目中引入了新的软件开发观念——XP。 特点:XP是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观是交流、朴素、反馈和勇气;即,任何一个软件项目都可以从四个方面入手进行改..
阅读全文
摘要:敏捷软件开发 人与人之间的交互是复杂的,并且其效果从来都是难以预期的,但却是工作中最重要的方面。 -- Tom DeMacro和Timothy Lister 敏捷软件开发宣言: ① 个体和交互 胜过 过程和工具 ② 可以工作的软件 胜过 面面俱到的文档 ③ 客户合作 胜过 合同谈判 ④ 响应变化 胜过 遵循计划 虽然右项也有价值,但是我们认为左项具有更大的价值。 敏捷宣言遵循的原则: ① 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。 ② 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。 ③ 经常性地交付可以工作的软件,交...
阅读全文
摘要:【原型模式】: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。适用性当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者为了避免创建一个与产品类层次平行的工厂类层次时;或者当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。【实现代码】usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication1{//原型模式:其实就是从一个对象再创建另一个可制定的对
阅读全文
摘要:工厂模式】:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。适用性当一个类不知道它所必须创建的对象的类的时候。当一个类希望由它的子类来指定它所创建的对象的时候。当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。以简单计算器为例:【简单工厂实现】:usingSystem;//【简单工厂类】classOperationFactory{publicstaticOperationCreateOperation(stringoperate){Operationoper=null;//保存
阅读全文
摘要:【代理模式】:为其他对象提供一种代理以控制对这个对象的访问。适用性:在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用Proxy模式。下面是一些可以使用Proxy模式常见情况:1)远程代理(RemoteProxy)为一个对象在不同的地址空间提供局部代表。NEXTSTEP[Add94]使用NXProxy类实现了这一目的。Coplien[Cop92]称这种代理为“大使”(Ambassador)。2)虚代理(VirtualProxy)根据需要创建开销很大的对象。在动机一节描述的ImageProxy就是这样一种代理的例子。3)保护代理(ProtectionProxy)控制对原始对象的访问。保护
阅读全文
摘要:【装饰模式】:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。Component是定义一个对象接口,可以给这些对象动态的添加职责。ConcreteComponent是定义一个具体的对象,也可以给这个对象添加一些职责。Decorator装饰抽象类,继承了Component类,从外类来扩展Component类的功能,但对于Component来说,是无需知道Decorator类的存在的。至于ConcreteDecorator就是具体的装饰对象,起到给Component添加职责的功能。【优点】:把类中的装饰功能从类中搬移到类外,这样可以简化原有的类;能有效的把核心职责和
阅读全文
摘要:【策略模式】:它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到客户代码;策略模式是一种定义一系列的算法的方法,从概念上来看,所有这些算法完成的是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。换句话说,策略模式是用来封装算法的。【示例代码】://算法抽象基类;usingSystem;abstractclassStrategy{publicabstractvoidAlgorithmInterface();}//实际实现算法AclassConcreteStrategyA:Strategy{publicover
阅读全文