一个OO的问题

GaoXX 2007-01-22 11:55:47
问题是这样的:

我有一个会员,还有一个组,会员要加入到这个组
可以理解为QQ上你加入一个群,
代码以下二种哪种更好呢? (代码是PHP的)

第一种:
$member = new Member($username);
$group = new Group($groupname);
$member->sendRequest($group);

第二种:
$group = new Group($groupname);
$member = new Member($username);
$group->getRequest($member);

因为组有很多限制,比如:不允许任何人加入、需要组管理员同意才能加入、任何人都可以随便加入,还有黑名单什么的

研究生同事说第二种恰当一些
但我感觉第一种好像好一些,我不懂OO,只是感觉这个动作是由member提请的,group如何处理还未知。
...全文
1121 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
都是很好的建议! 值得学习
tutengwolf 2007-11-16
  • 打赏
  • 举报
回复
#include "iostream.h"

class abstractwheel
{
public:
virtual void createwheel(){}
};
class abstractoilbox
{
public:
virtual void createoilbox(){}
};
class realwheel : public abstractwheel
{
public:
void createwheel()
{
cout<<"create wheel"<<endl;
}
};
class realoilbox : public abstractoilbox
{
public:
void createoilbox()
{
cout<<"create oilbox"<<endl;
}
};
class AbstractFactory
{
public:
virtual void CreatWheel()=0;
virtual void CreatOilBox()=0;
virtual void produt()
{
CreatWheel();
CreatOilBox();
}
abstractwheel *wheel;
abstractoilbox *oilbox;
};

class realfactory : public AbstractFactory
{
public:
realfactory()
{
wheel=new realwheel();
oilbox=new realoilbox();
}
void CreatWheel()
{
wheel->createwheel();
}
void CreatOilBox()
{
oilbox->createoilbox();
}

};

void main()
{

AbstractFactory *factory=new realfactory();
// factory->CreatOilBox();
// factory->CreatWheel();
factory->produt();
}
cust_hf 2007-11-07
  • 打赏
  • 举报
回复
如果要修改组的数据成员,就用组的方法实现。
如果要修改会员的数据成员,用用会员的方法实现。
cust_hf 2007-11-05
  • 打赏
  • 举报
回复
都实现不是更好吗?
使用更方便。
Slin000 2007-10-31
  • 打赏
  • 举报
回复
这个要看sendRequest 和 getRequest 到底都引发了什么行为, 这与这两个函数的设计目的有关.
如果sendRequest的函数只是调用了一次getRequest, 我觉得其实也就没什么所谓了.
与其讨论哪个调用好, 还不如仔细定义一下这两个函数, 把它们的功能设计区分开来.
joyself 2007-05-14
  • 打赏
  • 举报
回复
mark.
femalelover 2007-05-10
  • 打赏
  • 举报
回复
我会这样写
先由会员发出一条命令对组进行探测,是否可加入及其他所需要的信息分析 //用户需求
如果可以加入$group->getRequest($member);,//实现细节
-------
我不懂设计模式, 但这种做法明显不好吧,member探测成功之后,group就getRequest, 这都哪跟哪了。
xxyifan 2007-04-28
  • 打赏
  • 举报
回复
分清“加入组”是谁的责任后就OK了,一个类只有一个引起他变化的原因,他不能帮别人做事情
dai_weitao 2007-04-27
  • 打赏
  • 举报
回复
两种综合最好:
group一直listen,不断getRequest,等待request.
member sendRequest之后等待group处理.
group可采取批准或拒绝两种策略.
批准了就acceptRequest.

gudyn 2007-04-18
  • 打赏
  • 举报
回复
个为认为这两种方法是一样的,这是不同对象对各自己责任的实现。如果是由成员提出的则应该使用第一种,因为这是成员要完成的一个动作。要验证自己需要验证的条件(即是否加以加入这个组)是成员的责任。
thinkinnight 2007-04-11
  • 打赏
  • 举报
回复
学习
AWolfBoy 2007-04-11
  • 打赏
  • 举报
回复
觉得都不好,耦合太紧了。
你就说吧QQ会员也有好多种,普通会员,VIP会员,VIP银钻会员,。。。。
QQ的组也大都不一,等级烦多
我觉得使用桥接模式更好,会员和组都能各自发展
信徒5257 2007-04-10
  • 打赏
  • 举报
回复
给一个即时通信的交互过程,希望有个参考。

对于客户端来说:
member已经存在了。直接member->request()就OK了。
获得许可后。new group。然后member->GetGroup()从服务器上下载组内信息。

对于服务器来说:
member必然已经登陆了。Group也必然已经存在了。
只需要group->Accept()就OK了。但需要把Group信息发送到客户端。member->SendGroup()。

chon81 2007-04-10
  • 打赏
  • 举报
回复
我觉得跟数据的归属有关, 哪边是产生request, 另一边是不产生request的, 也是作为参数的.
如果反过来的话, 可能还要在内部对产生者再调用一次, 有些多余.

如:
$group->request($member);
$group是产生request.

如果以楼主的方式, 我想在$member->sendRequest($group);内可能还要再$group->getRequest($member);

这种问题比较复杂, 这是个人观点, 有错请指出, 欢迎讨论.
merlinfang 2007-04-04
  • 打赏
  • 举报
回复
好象两种都需要吧
lin_style 2007-04-02
  • 打赏
  • 举报
回复
因为组有很多限制,比如:不允许任何人加入、需要组管理员同意才能加入、任何人都可以随便加入,还有黑名单什么的

我会这样写
先由会员发出一条命令对组进行探测,是否可加入及其他所需要的信息分析 //用户需求
如果可以加入$group->getRequest($member);,//实现细节


sungengyu 2007-03-29
  • 打赏
  • 举报
回复
我觉得,好像没什么区别。
wanglovec 2007-03-28
  • 打赏
  • 举报
回复
光从概念上很难作出判断,实现细节很重要。

你可以先实现代码,根据代码判断,然后重构。如果代码引用的member细节更多,那就把请求加在member上;反之亦然。

>>呵呵 经典的重构思想 我也这样认为
iambic 2007-01-29
  • 打赏
  • 举报
回复
光从概念上很难作出判断,实现细节很重要。

你可以先实现代码,根据代码判断,然后重构。如果代码引用的member细节更多,那就把请求加在member上;反之亦然。
htqx 2007-01-29
  • 打赏
  • 举报
回复
有差别么?
加载更多回复(6)

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧