• C#设计模式概念总结


    里氏代换原则

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

    在软件中将一个基类的对象替换成子类对象,程序不会产生任何错误和异常,反之不成立。

    依赖倒转原则

    高层模块不应该依赖低层模块,都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。

    实例:CRM系统 从TXT文件或Excel文件中的客户信息存储到数据库

    CustomerDAO
    +AddCustomers() : void
    TXTDataConvertor
    +ReadFile() : void
    ExcelDataConvertor
    +ReadFile() : void

    问题:数据来源不相同时需要更换数据转换类

    引入抽象数据转换类DataConvertor 从配置文件中读取具体数据转换类名称 重构结构图如下:

    TXTDataConvertor
    +ReadFile() : void
    «abstract»
    DataConvertor
    +ReadFile() : void
    ExcelDataConvertor
    +ReadFile() : void
    CustomerDAO
    +AddCustomers() : void
    Appconfig
    //App.config

    开闭原则是目标 里氏代换原则是基础 依赖倒转原则是手段

    接口隔离原则

    客户端不应该依赖不需要的接口
    每一个接口承担一种相对独立的角色 尽量细化 方法尽量少
    实例:CRM系统客户数据显示模块

    Client
    «interface»
    CustomerDataDisplay
    +DataRead()
    +TransformToXML()
    +CreateChart()
    +DisplayChart()
    +CreateReport()
    +DisplayReport()
    ConcreateClass
    +DataRead()
    +TransformToXML()
    +CreateChart()
    +DisplayChart()
    +CreateReport()
    +DisplayReport()

    重构结构图

    Client
    «interface»
    XMLToChart
    +DataRead()
    +CreateChart()
    +DisplayChart()
    ConcreateClass
    +DataRead()
    +CreateChart()
    +DisplayChart()
    «interface»
    XMLToReport
    +DataRead()
    +CreateReport()
    +DisplayReport()
    «interface»
    NonXMLToReport
    +DataRead()
    +TransformToXML()
    +CreateReport()
    +DisplayReport()
    «interface»
    NonXMLToChart
    +DataRead()
    +TransformToXML()
    +CreateChart()
    +DisplayChart()

    合成复用原则

    优先使用对象组合,而不是继承来达到复用的目的
    复用时尽量使用组合/聚合/关联关系,少用继承。

    示例:

    CustomerDAO
    +AddCustomer()
    DBUtil
    +GetConnectiion() : Connection

    重构后的结构图

    CustomerDAO
    -util:DBUtil
    +AddCustomer()
    DBUtil
    +GetConnectiion() : Connection
    OracleDBUtil
    +GetConnectiion() : Connection
    AccessDBUtil
    +GetConnectiion() : Connection

    ##迪米特法则
    一个软件实体应当尽可能少的与其他实体发生相互作用,减少对象之间的交互

    示例:操作窗口的交互

    Button
    ComboBox
    List
    Label
    TextBox

    引入一个中间类Mediator重构后

    List
    Mediator
    ComboBox
    Button
    Label
    TextBox
  • 相关阅读:
    测试除了点点点,还有哪些内容呢?
    JVM内存和垃圾回收-13.垃圾回收算法
    洛谷_P3388
    浪漫七夕节文案、海报,进来自取。
    数据结构-作业7
    SpringMVC
    leetcode 729. My Calendar I(日程1)
    C++ 【new,delete内存管理】
    七夕给女朋友准备的小惊喜网站制作(html+css+js)
    .NET周刊【9月第2期 2023-09-10】
  • 原文地址:https://blog.csdn.net/baidu_24565387/article/details/126558638