假设你有一个Person对象,它有一个方法promote(),将它转换为一个Captain对象.你怎么称呼这种方法/互动?
它也感觉像是反转:
myCaptain = new Captain(myPerson);
Run Code Online (Sandbox Code Playgroud)
编辑:感谢所有的回复.我遇到这种模式的原因(在Perl中,但在任何地方相关)纯粹是为了方便.在不知道任何实现交易的情况下,你可以说这个Captain类"有一个" Person(我意识到这可能不是最好的例子,但要确保它不是一个子类).
实施我假设:
// this definition only matches example A
Person.promote() {
return new Captain(this)
}
personable = new Person;
// A. this is what i'm actually coding
myCaptain = personable.promote();
// B. this is what my original post was implying
personable.promote(); // is magically now a captain?
Run Code Online (Sandbox Code Playgroud)
所以,从字面上看,它只是构建一个方便的方法Captain.我只是想知道这种模式是否在野外被看到并且它是否有名字.而且我猜是的,它并没有真正改变课程,因为它返回了另一个课程.但它理论上可以,因为我并不真正关心原作.
Ken ++,我喜欢你指出一个用例.有时候改变某些东西真的很棒,比如一个记忆敏感的环境.
对象的方法不应该改变它的类.您应该有一个返回新实例的成员:
myCaptain = myPerson->ToCaptain();
Run Code Online (Sandbox Code Playgroud)
或者使用构造函数,如示例所示:
myCaptain = new Captain(myPerson);
Run Code Online (Sandbox Code Playgroud)
我将其称为转换,甚至是转换,具体取决于您如何使用该对象.如果您有一个值对象:
Person person;
Run Code Online (Sandbox Code Playgroud)
您可以使用构造函数方法隐式转换:
Captain captain = person;
Run Code Online (Sandbox Code Playgroud)
(这是假设C++.)
| 归档时间: |
|
| 查看次数: |
362 次 |
| 最近记录: |