• 设计模式六大设计原则


    一)单一职责原则【Single Responsibility Principle

           单一职责原则:应该有且仅有一个原因引起类的变更。

    (二)里氏替换原则【Liskov Substitution Principle

    里氏替换法则有两种定义:

    (1)如果对每一个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1 定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。

    (2)所有引用基类的地方必须能透明地使用其子类的对象。

    我们在类中调用其他类是务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了 LSP 原则。

    (三)依赖倒置原则【Dependence Inversion Principle

    依赖倒置原则包含三层含义:

    (1)       高层模块不应该依赖低层模块,两者都应该依赖其抽象。

    (2)       抽象不应该依赖细节。

    (3)       细节应该依赖抽象。

    (四)接口隔离原则【Interf ace Segregation Principle

           接口尽量要小。这是接口隔离原则的核心定义,不出现臃肿的接口(Fat Interface),但是“小”是有限度的,首先就是不能违反单一职责原则。根据接口隔离原则拆分接口时,必须首先满足单一职责原则。

           接口要高内聚。什么是高内聚?高内聚就是提高接口、类、模块的处理能力,减少对外的交互。

           定制服务。一个系统或系统内的模块之间必然会有耦合,有耦合就要相互访问的接口,我们设计时就需要给各个访问者(也就客户端)定制服务。

           接口设计是有限度的。接口的设计粒度是越小系统越灵活,这是不争的事实,但是这就带来的结构的复杂化,开发难度增加,维护性降低,这不是一个项目或产品所期望看到的,所有接口设计一定要注意适度。

    (五)迪米特法则【Low Of Demeter

           迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD.。

    狭义的迪米特法则的缺点:

    在系统里造出大量的小方法,这些方法仅仅是传递间接的调用,与系统的商务逻辑无关。

    遵循类之间的迪米特法则会是一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接的关联。但是,这也会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。

    门面模式和调停者模式实际上就是迪米特法则的应用。

    广义的迪米特法则在类的设计上的体现:

    优先考虑将一个类设置成不变类。

    尽量降低一个类的访问权限。

    谨慎使用Serializable。

    尽量降低成员的访问权限。

     

    (六)开闭原则【Open Close Principle

    关于开放封闭原则,其核心的思想是:

    软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。

    因此,开放封闭原则主要体现在两个方面:

    对扩展开放,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

    对修改封闭,意味着类一旦设计完成,就可以独立完成其工作,而不要对类进行任何修改。

     

     

    规则建议:

    开放封闭原则,是最为重要的设计原则,Liskov替换原则和合成/聚合复用原则为开放封闭原则的实现提供保证。

    可以通过Template Method模式和Strategy模式进行重构,实现对修改封闭、对扩展开放的设计思路。

    封装变化,是实现开放封闭原则的重要手段,对于经常发生变化的状态一般将其封装为一个抽象,例如银行业务中的IBankProcess接口。

    拒绝滥用抽象,只将经常变化的部分进行抽象,这种经验可以从设计模式的学习与应用中获得。

     

  • 相关阅读:
    Dot Net WinForm 控件开发 (七) 为属性提下拉式属性编辑器
    WinForm 程序的界面多语言切换
    c#遍历HashTable
    Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
    Dot Net WinForm 控件开发 (六) 为属性提供弹出式编辑对话框
    Dot Net WinForm 控件开发 (一) 写一个最简单的控件
    Dot Net WinForm 控件开发 (四) 设置属性的默认值
    Dot Net WinForm 控件开发 (二) 给控件来点描述信息
    Dot Net WinForm 控件开发 (八) 调试控件的设计时行为
    Dot Net WinForm 控件开发 (五) 复杂属性的子属性
  • 原文地址:https://www.cnblogs.com/zhxlsuyu/p/3512055.html
Copyright © 2020-2023  润新知