码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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
  • 相关阅读:
    2022年最新贵州建筑安全员模拟题库及答案
    C++中使用引用避免内存复制
    高质量代码计算降水季节指数Seasonality index
    DELMIA弧焊虚拟仿真:带变位机的机器人弧焊焊接程序自动生成方法
    R语言缺失时间序列的填充及合并:补齐时间序列数据中所有缺失的时间索引、使用merge函数合并日期补齐之后的时间序列数据和另外一个时间序列数据(补齐右侧数据)
    玩转SpringBoot:SpringBoot的几种定时任务实现方式
    JVM篇---第四篇
    计算机组成原理---第五章中央处理器---控制器的功能和工作原理
    【算法|动态规划No.7】leetcode300. 最长递增子序列
    软件工程毕业设计课题(83)微信小程序毕业设计PHP家政服务预约小程序系统设计与实现
  • 原文地址:https://blog.csdn.net/baidu_24565387/article/details/126558638
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号