设计模式学习小结——第一篇 原则和工厂的比较
* 忘掉模式可以记得的有几个原则:
* (SRP)单一职责原则——就一个类而言,应该近有一个引起它变化的原因。
* 开放—封闭原则——可扩展,但不可修改。
* 依赖倒置原则——抽象不应该依赖细节、细节应该依赖于抽象。说白了要针对接口编程。
* LSP(里氏代换原则)——子类型必须能够替换掉他们的父类型。
* LoD(迪米特法则)——如果两个类不必彼此直接通信,那么这两个类就不应当直接的相互作用。如果其中一个类需要调用另一个类的某一个的
方法的话,可以通过第三者转发这个调用。
* 三工厂模式的比较:
* 简单工厂:一个工厂,相关类的对象变化的逻辑判断封装的工厂内。
* 优点:处客户端不用考虑对象的变化。减少客户端和相关对象的耦合。
* 缺点:违背开放-封闭原则,需求变化总要修改工厂的判断逻辑(如果用反射可以解决)。
* 工厂方法模式:工厂类依赖相应所产生对象的类。
* 优点:针对接口编程,让子类决定实例那个类的对象,符合开放封闭-原则。
* 缺点:工厂方法怕简单工厂的内部逻辑判断转移到客户端的代码,增加客户端和实例对象的耦合。
* 抽象工厂:产品抽象出接口,工厂抽象出接口,具体工厂依赖具体产品。
* 优点:变化可配置,让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离不会出现在客户代码中。
* 综合杂谈:简单工厂使用在产品对象变化相对稳定的场合,工厂方法产品不稳定但数量不多的地方,抽象工厂会不会类爆炸(担心中,从UML图中看出依赖较多),简单工厂改进抽象工厂后通过反射配置文件是个解决数据访问的好方案。
(预:第二篇代理、委托和事件)
* (SRP)单一职责原则——就一个类而言,应该近有一个引起它变化的原因。
* 开放—封闭原则——可扩展,但不可修改。
* 依赖倒置原则——抽象不应该依赖细节、细节应该依赖于抽象。说白了要针对接口编程。
* LSP(里氏代换原则)——子类型必须能够替换掉他们的父类型。
* LoD(迪米特法则)——如果两个类不必彼此直接通信,那么这两个类就不应当直接的相互作用。如果其中一个类需要调用另一个类的某一个的
方法的话,可以通过第三者转发这个调用。
* 三工厂模式的比较:
* 简单工厂:一个工厂,相关类的对象变化的逻辑判断封装的工厂内。
* 优点:处客户端不用考虑对象的变化。减少客户端和相关对象的耦合。
* 缺点:违背开放-封闭原则,需求变化总要修改工厂的判断逻辑(如果用反射可以解决)。
* 工厂方法模式:工厂类依赖相应所产生对象的类。
* 优点:针对接口编程,让子类决定实例那个类的对象,符合开放封闭-原则。
* 缺点:工厂方法怕简单工厂的内部逻辑判断转移到客户端的代码,增加客户端和实例对象的耦合。
* 抽象工厂:产品抽象出接口,工厂抽象出接口,具体工厂依赖具体产品。
* 优点:变化可配置,让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离不会出现在客户代码中。
* 综合杂谈:简单工厂使用在产品对象变化相对稳定的场合,工厂方法产品不稳定但数量不多的地方,抽象工厂会不会类爆炸(担心中,从UML图中看出依赖较多),简单工厂改进抽象工厂后通过反射配置文件是个解决数据访问的好方案。
(预:第二篇代理、委托和事件)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端