Questions tagged «design-patterns»

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

20
什么时候应该使用访客设计模式?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 去年关闭。 改善这个问题 我一直在博客中看到对访客模式的引用,但我必须承认,我只是不明白。我阅读了有关该模式的Wikipedia文章,并且了解了该模式的原理,但是对于何时使用它仍然感到困惑。 作为刚刚真正获得装饰器模式并且现在在任何地方都可以看到其用途的人,我也希望能够真正直观地理解这种看似方便的模式。

15
为什么IoC / DI在Python中不常见?
在Java中,IoC / DI是一种非常普遍的做法,广泛用于Web应用程序,几乎所有可用的框架和Java EE中。另一方面,也有很多大型的Python Web应用程序,但是除了Zope(我听说过应该非常可怕的编码)之外,IoC在Python世界中似乎并不普遍。(如果您认为我错了,请举一些例子)。 当然,有一些流行的Java IoC框架的克隆可用于Python,例如springpython。但是它们似乎都没有被实际使用。至少,我从来没有在一个stumpled Django的或SQLAlchemy的 + <insert your favorite wsgi toolkit here>,它使用类似的东西,基于Web应用程序。 我认为IoC具有合理的优势,例如可以轻松替换django-default-user-model,但是在Python中广泛使用接口类和IoC看起来有些奇怪,而不是“ pythonic”。但是也许有人有一个更好的解释,为什么IoC在Python中没有得到广泛使用。

15
依赖注入和服务定位器模式之间有什么区别?
两种模式似乎都是控制反转原理的一种实现。也就是说,对象不应该知道如何构造其依赖项。 依赖注入(DI)似乎使用构造函数或setter来“注入”它的依赖项。 使用构造函数注入的示例: //Foo Needs an IBar public class Foo { private IBar bar; public Foo(IBar bar) { this.bar = bar; } //... } Service Locator似乎使用了一个“容器”,它连接了它的依赖项并给foo它的标志。 使用服务定位器的示例: //Foo Needs an IBar public class Foo { private IBar bar; public Foo() { this.bar = Container.Get<IBar>(); } //... } 因为我们的依赖关系只是对象本身,所以这些依赖关系具有依赖关系,后者甚至具有更多的依赖关系,依此类推。因此,控制容器(或DI容器)的反转诞生了。示例:温莎城堡,Ninject,结构图,弹簧等) 但是,IOC / …


24
Singleton:应如何使用
编辑:从另一个问题中,我提供了一个答案,该答案具有许多有关单身人士的问题/答案的链接:有关单身人士的更多信息,请参见: 因此,我读了Singletons主题:好的设计还是拐杖? 而且争论仍然很激烈。 我认为单例是一种设计模式(好的和坏的)。 Singleton的问题不是模式,而是用户(对不起每个人)。每个人和他们的父亲都认为他们可以正确实施一个方案(从我进行的许多访谈中,大多数人都做不到)。同样因为每个人都认为他们可以实现正确的Singleton,所以他们滥用Pattern并在不合适的情况下使用它(用Singletons代替全局变量!)。 因此,需要回答的主要问题是: 什么时候应该使用Singleton 您如何正确实现Singleton 我对本文的希望是,我们可以在一个地方(而不是谷歌和搜索多个站点)一起收集何时(然后如何)正确使用Singleton的权威来源。同样合适的是反使用和常见的不良实现的列表,这些列表解释了为什么它们无法正常工作以及对于好的实现而言它们的弱点。 所以滚了一下球: 我会举起我的手,说这是我用的,但可能有问题。 我喜欢他的“有效C ++”一书中对“斯科特·迈尔斯”的处理 使用单例的好情况(不多): 记录框架 线程回收池 /* * C++ Singleton * Limitation: Single Threaded Design * See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf * For problems associated with locking in multi threaded applications * * Limitation: * If you use this Singleton (A) within a …

6
关系数据库设计模式?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2个月前关闭。 改善这个问题 设计模式通常与面向对象的设计有关。 有用于创建和编程关系数据库的设计模式吗? 当然,许多问题必须具有可重用的解决方案。 示例包括表设计,存储过程,触发器等的模式。 是否存在类似于martinfowler.com的此类模式的在线存储库? 模式可以解决的问题示例: 存储分层数据(例如,具有类型的单个表与具有1:1密钥和差异的多个表...) 存储具有可变结构的数据(例如,通用列vs xml vs分隔列...) 对数据进行非规范化(如何在影响最小的情况下进行处理等)


2
存储库模式逐步说明[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 7年前关闭。 改善这个问题 有人可以向我解释.NET中的存储库模式,一步一步给出一个非常简单的示例或演示。 我知道这是一个非常普遍的问题,但到目前为止,我还没有找到满意的答案。

12
Android使用哪些架构模式?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 我正在对移动平台进行小规模研究,我想知道Android中使用了哪些设计模式? 例如,在iOS中,Model-view-controller与委托和其他模式一起被广泛使用。 Android使用什么模式,特别是在什么地方使用? 编辑 我不是在内核,dalvik等中使用深层设计模式,而是在开发应用程序时应用程序开发人员会遇到的模式。


27
让二传手返回“ this”是否是错误的做法?
使Java中的setter返回“ this”是好是坏的主意? public Employee setName(String name){ this.name = name; return this; } 这种模式很有用,因为这样您就可以像这样链接设置器: list.add(new Employee().setName("Jack Sparrow").setId(1).setFoo("bacon!")); 代替这个: Employee e = new Employee(); e.setName("Jack Sparrow"); ...and so on... list.add(e); ...但是有点违反标准惯例。我想这可能是值得的,因为它可以使设置者做其他有用的事情。我已经看到此模式在某些地方使用过(例如JMock,JPA),但这似乎并不常见,并且仅用于定义非常明确的API,该模式随处可见。 更新: 我所描述的内容显然是有效的,但是我真正要寻找的是一些关于是否可以普遍接受以及是否存在陷阱或相关最佳实践的想法。我知道Builder模式,但是它比我描述的要复杂得多-正如Josh Bloch所描述的那样,有一个关联的静态Builder类用于对象创建。
249 java  design-patterns  api  oop 


23
使用MVVM在WPF中处理对话框
在WPF的MVVM模式中,处理对话框是较复杂的操作之一。由于您的视图模型对视图一无所知,因此对话框通信可能会很有趣。我可以公开的是ICommand,当视图调用它时,会出现一个对话框。 有谁知道处理对话框结果的好方法?我说的是Windows对话框,例如MessageBox。 我们执行此操作的方法之一是在视图模型上有一个事件,当需要对话框时,视图将订阅该事件。 public event EventHandler<MyDeleteArgs> RequiresDeleteDialog; 可以,但是这意味着视图需要代码,而我想远离这些代码。



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.