上一页 1 2 3 4 5 6 7 8 9 ··· 11 下一页

装饰模式

摘要: [ Decorator ][ 共同的抽象接口 : 为了匹配装饰者 和 被装饰者 被装饰者 : 实现了接口的子类 , 这个类只包含了核心职责 装饰者 : 同样继承了抽象接口 , 只是为了与被装饰者的类型匹配 , 而不是继承其行为 ]装饰模式 , 动态地给一个对象添加一些额外的职责 ,就增加功能来说 , 装饰模式比生成子类更为灵活。把类中的装饰功能从类中搬移出去 , 这样可以简化原有的类。有效地把类的核心职责 和 装饰功能区分开了 , 而且可以去除相关类中重复的装饰逻辑。装饰者和被装饰对象有相同的超类型。可以用一个或多个装饰者包装一个对象。 装饰者可以在所委托被装饰者的行为之前或之后,加上自己的行 阅读全文
posted @ 2012-02-21 11:52 多个马甲 阅读(223) 评论(0) 推荐(0) 编辑

策略模式

摘要: [ Strategy ][ 行为型模式 ][ 抽象策略角色 : 策略类 , 通常由一个接口或者抽象类实现。 具体策略角色 : 包装了相关的算法和行为。 环境角色 : 持有一个策略类的引用 , 最终给客户端调用。]策略模式定义了一系列的算法 , 并将每一个算法封装起来 , 而且使它们还可以相互替换 。策略模式让算法独立于使用它的客户而独立变化。定义父类(接口) 子类继承父类(接口) , 实现继承的函数定义 应用场景类(Context) , 在构造函数里 , 根据参数 , 父类引用不同的子类应用场景类(Context) 定义一个函数 , 里面调用封装的实际函数客户端程序只需要使用 Context 阅读全文
posted @ 2012-02-21 11:49 多个马甲 阅读(255) 评论(0) 推荐(0) 编辑

简单工程模式

摘要: 又叫 静态工厂模式[ SimpleFactory ][ 创建型模式 ][ 角色: 工厂(Creator)角色 、抽象(Product)产品角色 、具体(Concrete Product)产品角色 ]简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个类的实例。 源码: public interface IOperation { int NumberA { get; set; } int NumberB { get; set; } int GetResult(); }class OperationAdd : IOper... 阅读全文
posted @ 2012-02-21 11:47 多个马甲 阅读(243) 评论(0) 推荐(0) 编辑

迪米特法则

摘要: [ Law of Demeter ]如果两个类不必彼此直接通信 , 那么这两个类就不应当发生直接的相互作用 。 如果其中一个类需要调用另一个类的某一个方法的话 , 可以通过第三者转发这个调用 。迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其 阅读全文
posted @ 2012-02-21 11:41 多个马甲 阅读(187) 评论(0) 推荐(1) 编辑

里氏代换原则

摘要: [ Liskov Substitution Principle LSP ]子类必须能够替换掉它们的基类 。里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。 阅读全文
posted @ 2012-02-20 22:57 多个马甲 阅读(165) 评论(0) 推荐(0) 编辑

单一职责原则

摘要: [ SRP,Single Responsibility Principle ] 一个类,最好只做一件事,只有一个引起它变化的原因。如果能想到多于一个动机去改变一个类,那么这个类就具有多于一个的职责。一个类只有一个引起它变化的原因,否则就应当考虑重构 SRP由引起变化的原因决定,而不是由功能职责决定。虽然职责常常是引起变化的轴线,但是有时却未必,应该审时度势。 测试驱动开发,有助于实现合理分离功能的设计。 可以通过Facade模式和Proxy模式进行职责分离。 阅读全文
posted @ 2012-02-20 22:55 多个马甲 阅读(134) 评论(0) 推荐(0) 编辑

开放-封闭原则

摘要: [ OCP,Open Closed Principle ]软件实体(类,模块,函数)应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。 对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。开放封闭的核心思想就是对抽象编程,而不对具体编程,因为抽象相对稳定。让类依赖于固定的抽象,所以对修改就是封闭的;而通过面向对象的继承和对多态机制,可以实现对抽象体的继承,通过覆写其方法来改变固有行为,实现新的扩展方法,所以对于扩展就是开放的。 阅读全文
posted @ 2012-02-20 22:55 多个马甲 阅读(115) 评论(0) 推荐(0) 编辑

依赖倒置原则

摘要: [ Dependence Inversion Principle ]高层模块不应该依赖于底层模块 , 两者都应该依赖于抽象 。抽象不应该依赖于实现细节 , 实现细节应该依赖于抽象 。要对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。 面向对象的开发很好的解决了这个问题,一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要变化。这大大降低了客户程序与实现细节的耦合.. 阅读全文
posted @ 2012-02-20 22:55 多个马甲 阅读(140) 评论(0) 推荐(0) 编辑

栈溢出利用

摘要: 函数调用时发生了什么 :系统在调用函数时,会为它开辟一个新的栈侦,并把新的栈侦压入系统栈中,这个新的栈侦中的内存空间会被它所属的函数独占!例如:(1) main() 函数在调用函数 A() 时,首先在自己的栈侦中压入函数返回地址,然后为函数 A() 创建新的栈侦并压入系统栈(2) 函数 A() 执行完返回时,函数 A() 的栈侦会被弹出系统栈 , main() 函数栈侦中的返回地址会被 "披露" 在栈顶,此时处理器按照这个返回地址跳转到 main 函数代码区执行寄存器和函数栈侦 :正在运行的函数栈侦总是在系统栈的栈顶ESP : 栈指针寄存器,其内存放着一个指针,该指针永远指 阅读全文
posted @ 2012-02-20 11:43 多个马甲 阅读(204) 评论(0) 推荐(0) 编辑

必备工具

摘要: 一 OllyDbg基本功能快捷键:F8 单步执行 遇见 call 语句时不进入 callF7 单步执行 遇见 call 语句时进入 callF2 设置断点 在一条指令上按下 F2 将设置为断点 , 再次按下将取消断点F4 执行到当前光标选中的指令F9 运行程序,直到遇到断点Ctrl + G 查看任意位置的数据二 SoftICE初始化命令的含义:Faults off 关闭错误提示。SoftICE 在加载进程时总是会发出一些错误警告set font 2 设置 2 号字体。SoftICE 有 3 种字体, 默认情况为小号字 , 2 号字体为 中号Lines 44 Lines 命令用于设置界面显示的行 阅读全文
posted @ 2012-02-20 11:43 多个马甲 阅读(182) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 11 下一页