Questions tagged «design-patterns»

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


7
使用面向对象的分析和设计对电梯建模[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 改善这个问题 在面向对象的设计和分析方面,似乎有一些问题在访谈和课堂上很常用。这就是其中之一;不幸的是,我在大学的OOP教授实际上并没有给出答案,所以我一直在想。 问题如下:设计一组基本的对象/方法,用于模拟电梯组。对象及其属性/方法是什么? 为了争辩,让我们假设我们的建筑物有20层。底层是大厅,而第二层是与停车场相连的(因此,人们将进入或离开位于底层或第二层的建筑物)。有一个供所有楼层使用的电梯排;电梯列中有三个电梯井,每个井轴有一个电梯。 在面向对象的模型中对此建模的正确方法是什么?

10
Java中的标记接口?
我被告知Java中的Marker接口是一个空接口,用于向编译器或JVM发出信号,告知实现该接口的类的对象必须以特殊方式处理,例如序列化,克隆等。 但是最近我了解到它实际上与编译器或JVM无关。例如,在使用Serializable接口的情况下,的方法writeObject(Object)会ObjectOutputStream执行类似的操作instanceOf Serializable来检测类是否相应地实现Serializable和抛出NotSerializableException。一切都在代码中处理,这似乎是一种设计模式,所以我认为我们可以定义自己的标记接口。 现在我的疑问: 上面第一点提到的标记接口定义错误吗?那么我们如何定义Marker接口呢? 并且instanceOf为什么不使用运算符而不是使用运算符,所以为什么要使用writeObject(Serializable)编译时类型检查而不是运行时呢? 注释比标记接口更好吗?

10
子类化Java Builder类
给这篇多布斯博士文章,特别是Builder模式,我们如何处理将Builder子类化的情况?以该示例的简化版本为例,在该示例中我们想使用子类来添加GMO标签,一个简单的实现将是: public class NutritionFacts { private final int calories; public static class Builder { private int calories = 0; public Builder() {} public Builder calories(int val) { calories = val; return this; } public NutritionFacts build() { return new NutritionFacts(this); } } protected NutritionFacts(Builder builder) { calories = builder.calories; } …



14
为什么我们需要抽象工厂设计模式?
大多数定义说: 抽象工厂提供了用于创建相关对象族的接口,而无需指定其具体类 抽象工厂模式的用途是什么,因为我们可以通过创建具体类本身的对象来完成任务。为什么我们有一个工厂方法来创建Concrete类的对象? 请提供任何我必须实现abstractFactory模式的现实示例?


7
使用策略模式和命令模式
两种设计模式都封装了一种算法,并将实现细节与调用类分离。我可以辨别的唯一区别是,策略模式采用了执行参数,而命令模式则没有。 在我看来,命令模式需要所有信息才能在创建时可用,并且能够延迟其调用(也许是脚本的一部分)。 哪些决定指导使用一种模式还是另一种模式?

4
跨领域关注示例
一个很好的例子是cross-cutting concern什么?维基百科页面上的病历示例对我而言似乎并不完整。 特别是从此示例中,为什么日志记录会导致代码重复(散射)?(除了像log("....")到处这样的简单调用之外,这似乎没什么大不了的)。 a core concern和a和有cross-cutting concern什么不一样? 我的最终目标是更好地了解AOP。

5
设计模式和建筑模式之间有什么区别?
当我们在互联网上阅读有关设计模式时,我们注意到有3类: 创造力的 结构性 行为的 但是,当我们创建软件的体系结构时,我们会考虑MVP,MVC或MVVM。 例如,在创建模式中,我找到了单例模式,但我还在MPV中使用了单例。 所以我的问题是:设计模式是否涵盖了产品的所有结构? 如果是,那么单例如何成为设计模式?因为我可以在应用程序中的任何地方使用它。基本上,仅在内存中一次创建一个实例是受限制的,但是这个概念是否定义了软件的设计方式? 如果不是,那么三类模式中的MVP,MVC和MVVM在哪里?软件设计和体系结构之间有什么区别?

19
有没有典型的状态机实施模式?
我们需要在C中实现一个简单的状态机。 标准的switch语句是最好的方法吗? 我们有一个当前状态(状态)和一个转换触发器。 switch(state) { case STATE_1: state = DoState1(transition); break; case STATE_2: state = DoState2(transition); break; } ... DoState2(int transition) { // Do State Work ... if(transition == FROM_STATE_2) { // New state when doing STATE 2 -> STATE 2 } if(transition == FROM_STATE_1) { // New State when …

22
撤消引擎的设计模式
我正在为民用工程应用程序编写结构建模工具。我有一个代表整个建筑物的巨大模型类,其中包括节点,线元素,荷载等的集合,它们也是自定义类。 我已经编写了一个撤消引擎,该引擎可以在对模型进行每次修改后保存一个深层副本。现在,我开始考虑是否可以使用其他编码。除了保存深层副本之外,我还可以保存每个修改器动作的列表以及相应的反向修改器。这样我就可以将反向修改器应用于当前模型以撤消,或将修改器应用于重做。 我可以想象您将如何执行更改对象属性等的简单命令。但是复杂命令呢?就像在模型中插入新的节点对象并添加一些保留对新节点的引用的线对象一样。 如何实施呢?

4
避免在for循环中使用if语句?
我有一个叫做的类Writer,它具有如下功能writeVector: void Drawer::writeVector(vector<T> vec, bool index=true) { for (unsigned int i = 0; i < vec.size(); i++) { if (index) { cout << i << "\t"; } cout << vec[i] << "\n"; } } 我正在尝试没有重复的代码,同时仍然担心性能。在函数中,即使结果始终相同if (index),我for也会在-loop的每一轮中进行检查。这与“担心性能”相反。 通过将检查放在我的for-loop 之外,可以轻松避免这种情况。但是,我将获得大量重复代码: void Drawer::writeVector(...) { if (index) { for (...) { cout << i …


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.