Questions tagged «design-patterns»

设计模式是解决软件设计中常见问题的通用可重用解决方案。当您对设计模式的实现有疑问时,请使用此标签来提问。请不要在有关文本模式匹配的问题上使用此标签。当在实现上遇到重磅问题时使用此标记-标记实现所使用的代码语言。


24
MVP和MVC有什么区别?
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 当超越RAD(拖放和配置)构建用户界面的方式时,许多工具鼓励您使用三种设计模式,分别称为Model-View-Controller,Model-View-Presenter和Model-View-ViewModel。我的问题包括三个部分: 这些模式解决了哪些问题? 它们有何相似之处? 它们有何不同?

30
单身人士有什么不好呢?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 该单例模式是一个缴足成员四人帮的模式书,但最近似乎而是由开发者世界孤立。我仍然使用很多单例,尤其是对于工厂类,尽管您必须对多线程问题(实际上是任何类)有所注意,但我看不出它们为什么如此糟糕。 堆栈溢出似乎特别假设每个人都同意Singletons是邪恶的。为什么? 请以“ 事实,参考或特定专业知识 ” 支持您的回答



25
MVC和MVVM有什么区别?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6个月前关闭。 标准“模型视图控制器”模式和Microsoft的Model / View / ViewModel模式之间有区别吗?

13
命名类-如何避免将所有内容都称为“ <WhatEver> Manager”?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 很久以前,我读过一篇文章(我相信是博客文章),这使我走在命名对象的“正确”轨道上:在程序中命名事物时要非常谨慎。 例如,如果我的应用程序(作为典型的业务应用程序)正在处理用户,公司和地址,则我将具有User,a Company和Address域类-可能会弹出a UserManager,a CompanyManager和a AddressManager来处理这些问题。 所以,你可以告诉那些UserManager,CompanyManager和AddressManager做什么?不可以,因为Manager是一个非常通用的术语,适用于您可以使用域对象执行的所有操作。 我阅读的文章建议使用非常具体的名称。如果它是C ++应用程序,并且UserManager的工作是分配用户并将其从堆中释放出来,那么它将不会管理用户,而是保护用户的生死。嗯,也许我们可以将其称为UserShepherd。 或者,也许UserManager的工作是检查每个User对象的数据并用密码对数据签名。然后我们会有一个UserRecordsClerk。 现在,这个想法一直困扰着我,我尝试应用它。并且很难找到这个简单的想法。 我可以描述这些类的作用,并且(只要我不会陷入快速而肮脏的编码中)我编写的类就可以做一件事。从描述到名称,我想念的是一种名称目录,这是一个将概念映射到名称的词汇表。 最终,我想在脑海中想起一个模式目录(通常,设计模式很容易提供对象名称,例如工厂) 工厂-创建其他对象(取自设计模式的命名) 牧羊人-牧羊人处理对象的生命周期,对象的创建和关闭 同步器-在两个或多个对象(或对象层次结构)之间复制数据 保姆-帮助对象在创建后达到“可用”状态-例如,通过连接到其他对象 等等等 那么,您如何处理该问题?您是否有固定的词汇表,是否在动态地发明新名称,或者您认为命名不那么重要或错误? PS:我也对讨论该问题的文章和博客链接感兴趣。首先,这是让我思考的原始文章:不带“ Manager”命名Java类 更新:答案摘要 这是我同时从这个问题中学到的一些小知识。 尽量不要创建新的隐喻(保姆) 看看其他框架做什么 有关此主题的其他文章/书籍: 您会发现自己经常定期参加哪些课程? 命名类的最佳方法是什么? 图书:设计模式:可重用的面向对象软件的元素(精装本) 书籍:企业应用程序架构的模式(精装) 书籍:实施模式(平装本) 还有我从答案中(主观地!)收集的名称前缀/后缀的当前列表: 协调员 建造者 作家 读者 处理程序 容器 协议 目标 转换器 控制者 视图 厂 实体 桶 道路上的一个好提示: 不要让命名麻痹。是的,名称很重要,但它们的重要性还不足以浪费大量时间。如果您不能在10分钟内想到一个好名字,那就继续吧。

28
函数式编程会取代GoF设计模式吗?
自从我去年开始学习F#和OCaml以来,我已经阅读了大量文章,这些文章坚持认为设计模式(尤其是Java语言)是命令式语言中缺少功能的变通方法。我发现一篇文章提出了相当有力的主张: 我遇到的大多数人都阅读 过《四人帮》(GoF)的《设计模式》一书。任何自以为是的程序员都会告诉您,该书与语言无关,并且无论您使用哪种语言,该模式通常适用于软件工程。这是一个崇高的主张。不幸的是,它与事实相去甚远。 函数式语言极富表现力。在一种功能性语言中,因为该语言可能非常高级,所以不需要设计模式,因此您最终只能使用可以消除所有设计模式的概念进行编程。 函数式编程(FP)的主要功能包括一流的功能,柯里化的,不变的值等。在我看来,OO设计模式无法近似所有这些功能。 此外,在支持OOP的功能语言(例如F#和OCaml)中,对我来说显而易见的是,使用这些语言的程序员将使用与其他OOP语言相同的设计模式。实际上,现在我每天都使用F#和OCaml,并且在这些语言中使用的模式与在用Java编写时使用的模式之间没有显着差异。 函数式编程消除了对OOP设计模式的需求,这有何道理?如果是这样,您是否可以发布或链接到典型的OOP设计模式及其等效功能的示例?


20
C ++ Singleton设计模式
最近,我碰到了C ++的Singleton设计模式的实现/实现。它看起来像这样(我从现实生活的示例中采用了它): // a lot of methods are omitted here class Singleton { public: static Singleton* getInstance( ); ~Singleton( ); private: Singleton( ); static Singleton* instance; }; 从该声明中,我可以推断出实例字段是在堆上初始化的。这意味着存在内存分配。对我来说,完全不清楚的是何时确切地将要释放内存?还是有错误和内存泄漏?似乎实现中存在问题。 我的主要问题是,如何以正确的方式实施它?

7
Java核心库中的GoF设计模式示例
这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 我正在学习GoF Java设计模式,我想看看其中的一些实际示例。Java核心库中的这些设计模式有哪些好的示例?


18
为什么总是在__new __()之后调用__init __()?
我只是想简化我的一个类,并以与flyweight设计模式相同的样式介绍了一些功能。 但是,对于为什么__init__总是被称为after ,我有点困惑__new__。我没想到这一点。谁能告诉我为什么会这样,否则我如何实现此功能?(除了将实现放到__new__hacky中之外)。 这是一个例子: class A(object): _dict = dict() def __new__(cls): if 'key' in A._dict: print "EXISTS" return A._dict['key'] else: print "NEW" return super(A, cls).__new__(cls) def __init__(self): print "INIT" A._dict['key'] = self print "" a1 = A() a2 = A() a3 = A() 输出: NEW INIT EXISTS INIT EXISTS INIT …

28
关于JavaScript中代码组织的公认最佳实践[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 随着jQuery之类的JavaScript框架使客户端Web应用程序变得更丰富,更实用,我开始注意到一个问题... 您如何将其组织起来? 将所有处理程序放在一个位置并为所有事件编写函数? 创建函数/类来包装所有功能? 写得像疯了似的,只是希望它能达到最佳效果? 放弃并获得新的职业? 我提到了jQuery,但实际上实际上是任何JavaScript代码。我发现随着线的堆积开始,管理脚本文件或查找所需内容变得越来越困难。我发现的最大问题可能是做同一件事的方法太多,很难知道哪种方法是当前公认的最佳实践。 关于保持.js文件与应用程序其余部分一样整洁的最佳方法,是否有任何一般性建议?还是这只是IDE的问题?有更好的选择吗? 编辑 该问题旨在更多地涉及代码组织而不是文件组织。有一些非常好的合并文件或拆分内容的示例。 我的问题是:组织实际代码的当前公认的最佳实践方法是什么?与页面元素进行交互并创建互不冲突的可重用代码的方式,甚至是推荐的方式? 有些人列出了名称空间,这是一个好主意。还有哪些其他方式,更具体地说是处理页面上的元素并使代码井井有条和整洁?

15
什么时候使用构建器模式?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 什么是一些常见的,现实世界的例子使用Builder模式的?它能买到什么?为什么不只使用工厂模式?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.