RoleAssigner類的理解疑惑

liuyf發表於2012-02-13
,這裡面機器人的例子還好理解,
public String hello(String id) {
Robot robot = robotRepository.find(id);
//將角色智慧機器人IntelligentRole的行為注入到Robot資料物件中
IntelligentRole intelligentRobot = (IntelligentRole) roleAssigner.assign(robot, new IntelligentRobot());
//得到一個混和robot將具有聽 看 感覺等能力行為
return "Hello, " + intelligentRobot.hear();
}
把智慧的屬性附加到之前的robot上,roleAssigner名副其實就是角色助手的作用。不過還不夠徹底,因為不能將intelligentRobot向下轉型為Robot,即(Robot)intelligentRobot來呼叫Robot的方法。

再看SimpleJdonFrameworkTest專案,ResourceManagerContext類裡面的update方法
@Path("/user")
@PUT
public Represent update(UserModel user) {
UserModel userold = getUser(user.getUserId());
if (userold == null)
return new State("/");

userold.update(user);

// here is for client's load
ComputeContext computeContext = new ComputeContext();
computeContext.preloadData(userold);
RepositoryManagerIF rm = (RepositoryManagerIF) roleAssigner.assign(userold, new RepositoryManagerEventImp());
rm.remember(userold);
return new State("/");
}
其中的
RepositoryManagerIF rm = (RepositoryManagerIF) roleAssigner.assign(userold, new RepositoryManagerEventImp());
rm.remember(userold);
是將角色RepositoryManagerEventImp,賦予userold,但為何在remember中又要講userold作為引數呢。
按理說應該直接rm.remember就好了呀。如果說像程式碼中的寫法完全可以繞開roleAssigner,直接new一個RepositoryManagerEventImp不就完了麼?
這樣的寫法是否是由於物件導向的技術限制呢?

相關文章