假设你有一个Person
对象,它有一个方法promote()
,将它转换为一个Captain
对象.你怎么称呼这种方法/互动?
它也感觉像是反转:
myCaptain = new Captain(myPerson);
编辑:感谢所有的回复.我遇到这种模式的原因(在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?
所以,从字面上看,它只是构建一个方便的方法Captain
.我只是想知道这种模式是否在野外被看到并且它是否有名字.而且我猜是的,它并没有真正改变课程,因为它返回了另一个课程.但它理论上可以,因为我并不真正关心原作.
Ken ++,我喜欢你指出一个用例.有时候改变某些东西真的很棒,比如一个记忆敏感的环境.
对象的方法不应该改变它的类.您应该有一个返回新实例的成员:
myCaptain = myPerson->ToCaptain();
或者使用构造函数,如示例所示:
myCaptain = new Captain(myPerson);
我将其称为转换,甚至是转换,具体取决于您如何使用该对象.如果您有一个值对象:
Person person;
您可以使用构造函数方法隐式转换:
Captain captain = person;
(这是假设C++.)
一个更简单的解决方案可能是将排名作为人的财产.我不知道您的数据结构或要求,但如果您需要尝试打破语言基础知识的东西,可能有更好的方法来实现它.