如何选择设计模式

时间:2015-04-29 13:07:58

标签: design-patterns

我正在学习设计模式,我有一个问题。

例如,这是第一个设计 形状
形状 - >红圈
形状 - >蓝色圆形 形状 - >红场
形状 - >蓝色方形
...

第二个设计
形状
形状 - >圆
形状 - >广场
Shape-> Circle-> Red Circle
Shape-> Circle-> Blue Circle
形状 - >正方形 - >红色正方形
形状 - > Square广场> BlueSquare
...

感谢Tony,我想出了一个情况。在第一个设计中,Shape类是抽象的,现在我只有“红色方块”和“蓝色方块”的功能。这意味着我无法在Shape类中定义函数,但我需要在“Red Square”和“Blue Square”中逐一进行。第二种设计的情况相同,我可以将新功能放在“Square”类中 现在,我的问题是我是否正确,是否还有其他可以使用的设计?

2 个答案:

答案 0 :(得分:1)

您应该遵循" Bridge" 模式。

Bridge Pattern用于将接口与其实现分开。这样做可以提供灵活性,使两者都可以独立变化。

答案取自:When do you use the Bridge Pattern? How is it different from Adapter pattern?

  

Bridge模式是旧建议的应用,"更喜欢   继承的构成"。当你必须子类时它会变得很方便   不同的时间以彼此正交的方式。跟你说   必须实现彩色形状的层次结构。你不会是子类   使用Rectangle和Circle进行形状,然后使用子类Rectangle   RedRectangle,BlueRectangle和GreenRectangle相同   圆,你呢?你更愿意说每个Shape都有一个Color   并实现颜色的层次结构,这就是桥梁   图案。好吧,我不会实现"颜色层次"但是你   明白了......

答案 1 :(得分:1)

您的问题不够具体,无法给出可靠的答案。在评论中讨论后,很明显您正在积极尝试学习设计模式,因此您可能不清楚提出问题的最佳方式。我提供这个作为答案,所以我有空间打字。

<强>资源

dofactory - 在寻找符合我需要的模式时,我将此作为参考源。

Head First Design Patterns - 我用这本书很好地介绍了设计模式以及如何使用它们。学习设计模式是我理解发展的关键点。它向您展示了如何真正使用接口和抽象来实现软件开发中的常见问题。

Beginner Guide to Design Patterns - 很好的文章,可以帮助您开始设计模式。

Javascript Design Patterns - (BONUS)这个网站对于学习javascript设计模式非常不可思议。我要包括说明我在下面提出的关于查找您使用的任何语言的设计模式的观点。

当看到dofactory时,你可以看到模式有三个区域;创造性,结构性,行为性。在寻找模式时,要知道你想要实现的目标。

一些提示

  • 如果模式不能自然地解决问题,请不要强制使用模式。
  • 不要过度设计解决方案,试图将模式强加到你编写的每一行代码中,它们很有用,但并不总是需要。
  • 在必要时使用多种图案,它是完美的&#39; Ok&#39;让多个模式紧密相连,再次..如果它是天生的合适。
  • 学习一些常见的模式,这个小清单是我自己的,但谷歌搜索会揭示其他个人常用模式列表;
    • 策略
    • [摘要]工厂
    • 的Singleton
    • 命令
    • 装饰
    • 观察
  • 查找您尝试学习的任何语言的设计模式,它将使您更好地了解如何更好地利用该语言。 (见上面的奖金链接)
  • 在您对GoF模式有一个正确的理解并研究企业设计模式之后,请展开翅膀。

我希望这个答案有助于指导您学习设计模式。我知道它并没有完全回答你的问题,但希望它能帮助你更好地理解,并让你回答一个关于设计模式和代码用法的更具体的问题。