• 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
  • 相关阅读:
    sql注入漏洞(CVE-2022-32991)
    C++11 ——— 线程库
    Modbus通信协议
    相似度系列-6:单维度方法:Evaluating Coherence in Dialogue Systems using Entailment
    Bean 的作用域和生命周期
    LabVIEW利用人工神经网络辅助进行结冰检测
    IP地址划分知识点总结
    MIT课程分布式系统学习06——Fault Tolerance raft1
    常用API(基础)
    漏洞深度分析|Apache MINA SSHD反序列化漏洞
  • 原文地址:https://blog.csdn.net/baidu_24565387/article/details/126558638