首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链类行为

链类行为
EN

Software Engineering用户
提问于 2013-05-08 20:09:08
回答 7查看 392关注 0票数 6

我有一堂鸟课。鸟能学,鸟能飞(方法)。鸟只有在学习之后才能飞翔。

考虑到两种方法都是公开的。您如何向其他开发人员说明这一点。通常,他们应该查看一下公共方法的名称,并了解他们所做的事情。但是,如果不阅读注释或者理解method2只能在method1之后调用的封装代码,他怎么能理解呢?

EN

回答 7

Software Engineering用户

回答已采纳

发布于 2013-05-08 20:12:26

最干净(但并不总是最实用)的方法是让learn返回一个EducatedBird,然后再返回一个fly

我不确定是否有一个以它命名的正式模式,但是这种模式对于其他类型的状态转换(比如打开连接)非常有效。

票数 15
EN

Software Engineering用户

发布于 2013-05-08 20:34:01

特拉斯廷的回答是教科书上的建议,也不是一个坏的建议。这被称为状态模式,可以在大多数编程语言中实现,但我发现它非常笨重,当您开始进入10-20状态范围时,您会希望已经将该模式作为一系列的装饰器来实现,并且当您完成时,您将已经完全过时了。

只有当状态和状态转换的数量清晰而不同时,状态模式才会有用。如果您想拥有任意数量的状态,或者具有多维状态,则应该使用装饰图案。不过,这也有它自己的警告。根据您的语言,它也可能很笨重(如果您有一个期望FlyingBird的方法,但是您传递了一个包装FlyingBirdYellowBird .)。通过这种方式实现修饰器模式,您可能会失去语言的一些好处。

在我看来,最好的方法是为对象和异常处理隐式地实现状态模式,或者在运行时组合对象(如果您的语言支持的话)。

票数 6
EN

Software Engineering用户

发布于 2013-05-08 22:15:15

通常,如果我必须在编译时强制执行一种方法必须首先发生,并使编码器明白,我通常要么使用与Telastyn的状态模式类似的monad,要么强制使用令牌。

返回一个FlightKnowledge对象。该对象应该具有一个构造函数可见性,从而阻止普通消费者创建自己的对象(私有、受保护、内部等)。然后,将Fly(FlightKnowledge)公开为Fly方法的唯一重载。这要求编码器传入一个有效的FlightKnowledge对象(取决于您的语言,您可以使FlightKnowledge成为一个不能为空的类型,或者通过装饰来强制该参数不能为空),如果他能够获得的唯一方法是调用Learn(),那么您已经执行了您的操作顺序。

只是不要将它转换为"King's Quest“反模式(要飞(),您必须拥有FlightKnowledge,您可以通过调用Learn()来获得它,它通过调用AskForTuition()调用AskForTuition()来获取一个由AskForTuition()生成的学费对象,该对象接受的是.的SweetTalk对象)。如果您的操作顺序如此之深,则令牌本身就是错误的模式。

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/197463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档