设计模式学习笔记之 Factory
Factory 模式用来在创建一种经常发生变化,却有稳定接口的对象时使用。它隔离了对象的使用者和具体实现者,避免了传统模式下的使用者和具体实现者之间的紧耦合关系,较大程度的避免了对象发生变化时造成的软件的脆弱。
下面举一个测验的例子,每科课程都有自己的测验,每种测验又包括选择题和问答题两种:






所有的测试都继承自此抽象类,例如数学测试:










但此时并未解决使用者和具体实现之间的耦合关系,于是使用Factory





所有的测试的Factory都继承自此抽象类,继续数学测试例子:








下面是使用数学测试的例子








DoQuiz的参数是QuizFactory类型的,当使用数学测试时



现在我们又需要英语测试了,那就这样

















然后给QuizManager.DoQuiz()传个EnglishQuizFactory就OK了。
前面提到的Abstract Factory模式就是Factory模式的一个演化。在Abstract Factory模式中,Factory里都包括数个对象,这些对象是成系列出现的,而且是相互关联的,这一点可以与Factory模式来区别。如果现在在Quiz这个需求中又出现了Quiz的面试部分,而且这部分和笔试部分有很强的联系,例如让你讲解自己的Quiz笔试,那么这两部分就是成系列出现的了,而且又是相互关联的,那么Factory就演变成Abstract Factory了。
参考 MSDNWebCast C#设计模式纵横谈 李建忠
分类:
设计模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通