上一页 1 ··· 5 6 7 8 9 10 下一页
摘要: 1. 动机上述描述的问题(用继承来扩展功能)根源在于我们“过度地使用了继承来扩展对象的功能”,由于继承为类型引入的静态特质(编译时就需要确定的东西),使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀(多继承)。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”所导致的影响将为最低?2. 意图动态地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类更为灵活。3. 结构图4. 几个要点• 通过采用组合、而非继承的手法, Deco 阅读全文
posted @ 2011-03-22 12:50 stone lv 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 1. 动机上述描述的问题根源在于:客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性、扩展性等弊端。如何将“客户代码与复杂的对象容器结构”解耦?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?2. 意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。3. 结构4. 几个要点•Composite模式采用树形结构来实现普遍存在的对象容器,从而将“一 对多”的关系转化为“一对一”的关系,使得客户代码可以一 阅读全文
posted @ 2011-03-18 12:37 stone lv 阅读(435) 评论(0) 推荐(0) 编辑
摘要: 1. 动机思考上述问题的症结:事实上由于Tank类型的固有逻辑,使得Tank类型具有了两个变化的维度——一个变化的维度为“平台的变化”,一个变化的维度为“型号的变化”。如何应对这种“多维度的变化”?如何利用面向对象技术来使得Tank类型可以轻松地沿着“平台”和“型号”两个方向变化,而不引入额外的复杂度?2. 意图将抽象部分与实现部分分离,使它们都可以独立地变化。3. 结构4. 几个要点•Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有 的绑定关系,使得抽象(Tank的型号)和实现(不同的平台)可以沿着各自的维度来变化。• 所谓抽象和实现沿着各自纬度的变化,即“子类化”它们,比如 阅读全文
posted @ 2011-03-15 12:48 stone lv 阅读(496) 评论(0) 推荐(0) 编辑
摘要: 1. 动机在软件系统中,由于应用环境的变化, 常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?2. 意图将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。3. 结构4. 几个要点• Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况” ,在遗留代码复用、类库迁移等方面非常有用。•GoF23 定义了两种Adapter模式的实现结构:对象适配器和类适配 阅读全文
posted @ 2011-03-09 12:56 stone lv 阅读(650) 评论(0) 推荐(0) 编辑
摘要: 1. 动机在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象” ,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?2. 意图使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。3. 结构4. 几个要点•Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求 这些“易变类”拥有“稳定的接口”。•Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆”的 阅读全文
posted @ 2011-03-09 12:47 stone lv 阅读(465) 评论(0) 推荐(0) 编辑
摘要: 正则表达式基础知识 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如: JScriptVBScript匹配/^\[ \t]*$/"^\[ \t]*$"匹配一个空白行。/\d{2}-\d{5}/"\d{2}-\d{5}"验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。/<(.*)>.*<\/\1>/"<(.*)>.*<\/ 阅读全文
posted @ 2011-03-07 16:55 stone lv 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 1. 动机在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如何应对这种变化?如何提供一种“封装机制”来隔离出“这个易变对象”的变化,从而保持系统中“其他依赖该对象的对象”不随着需求改变而改变?2. 意图定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。3. 结构4. 几个要点• Factory Method模式主要用于隔离类对象的使用 者和具体类型之间的耦合关系。面对一个经常变 化的具体类型,紧耦合关系会导致软件的脆弱。• Factory Method模式通过 阅读全文
posted @ 2011-03-07 16:11 stone lv 阅读(680) 评论(0) 推荐(0) 编辑
摘要: 1. 动机在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?2. 意图将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。3. 结构4. 几个要点• Builder 模式主要用于“分步骤构建一个复杂的对 象”。在这其中“分步骤”是一个稳定的算法,而复杂对象的各个部分则经常变化。• 变化点在哪里,封装 阅读全文
posted @ 2011-03-07 16:05 stone lv 阅读(660) 评论(0) 推荐(0) 编辑
摘要: 1. 动机在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?2. 意图提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。3. 结构4. 几个要点•“系列对象”指的是这些对象之间有相互依赖、或作用的关系,例如游戏开发场景中的“道路”与“房屋”的依赖,“道路”与“地道”的依赖。• Abstract Factory模式主要在于应对“新系列”的需求变动。 其缺点在于难以应对 阅读全文
posted @ 2011-03-07 16:00 stone lv 阅读(920) 评论(0) 推荐(0) 编辑
摘要: 概述:该讲主要描述了 面向对象设计模式的分类以及Singleton单件模式。一、面向对象设计模式的分类从目的来看:– 创建型(Creational)模式:负责对象创建。– 结构型(Structural)模式:处理类与对象间的组合。– 行为型(Behavioral)模式:类与对象交互中的职责分配。从范围来看:– 类模式 处理类与子类的静态关系。– 对象模式 处理对象间的动态关系。二、Singleton单件模式1. 动机在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这应 阅读全文
posted @ 2011-03-07 15:42 stone lv 阅读(1116) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 下一页