作者 内容
 nkchwfree  提一个弱弱的问题
 

现在有两个类
class A
{
B bb;
int getSomething()
{
return B.getInt(this);
}

void setB(B pb)
{
this.bb = pb;
}
}

class B
{
int getInt(A aa)
{
...code...
return 1 或 0;
}
}

调用时
B b = new B();
A a = new A();
a.setB(b);
print a.getSomething();

z请问 A和B之间的关系应该是什么关系,用uml来怎么画?

 03/12/17 11:54 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 panrglory  一个A实例由一个B实例‘组成’;一个B实例‘使用关联’某个A实例
 

我估计大部分的情况下,你是可以用多个方法的参数实现的,建议把
int getInt(A aa)
改成
int getInt(int n1, int n2, ...)


这样大体上就可以归并flyweight pattern 里去了

 03/12/17 12:29 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 nkchwfree  回复: 一个A实例由一个B实例‘组成’;一个B实例‘使用关联’某个A实例
 

谢谢,我当时这样写主要是想,将对象传过去可能扩展性好些.
我当时自己觉得这样写比较怪,不知道这样写是不是有什么不好?

 03/12/17 12:45 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 panrglory   可能刚才是我弄错了...
 

我有一个问题没弄清楚:B中有没有业务数据
我楼上的说法仅限于“B中也存储了业务数据”的情况,没细看题目,就想当然了 :(



如果没有业务数据的话就是我弄错了
这样的话你的做法是典型的strategy pattern(虽然我个人极不喜欢把代码放在独立的对象里,并称之为类的做法,觉得这只有学术意义)

我个人的习惯是:
如果有setB 这样的操作的话,我用state pattern
否则我会用template method pattern

 03/12/18 00:51 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 panrglory  杂谈
 

我还有点想法要说:
“面对对象”理论中的类图,就是在考虑:什么是术语概念
包括类图上我们可以看见许多的关联,其实关联也都是用来辅助说明“什么是术语”的
类图无法体现“如何通过业务逻辑得到最佳的类图”,甚至不能保证“业务逻辑是正确的”,类图只是说明根据业务逻辑设计的软件




至于这个strategy pattern,明显地带有代码和数据相分离的企图
代码和数据肯定都是软件中必然接触到的术语,但是这种企图似乎并不值得面对对象的系统分析员们提倡,我个人认为这种样式下的类图肯定不会是“最佳的类图”

其它明显带这种企图的pattern 还包括:
Memento
Iterator
Visitor

 03/12/18 01:15 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 spide   如果B实体聚合一些A实体,那么B应该“不知道”A类型的具体细节,而A类型“知道”B的细节,这样(的c/s关系)才能做出稳定的东西,变更A的实现方法不需要重新测试B。这段代码有点符合这个做法,但是还不够彻底,“鸡生蛋蛋生鸡问题”还会有点纠缠不清,不利于开发。
 
 03/12/20 20:28 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首
 spide   如果B想发送一些消息给客户(包括A),也不应该在知道A的细节情况下。虽然显得累赘一点,但是最好还是不要设计任何“对等的”关系,遵循c/s形式让人很容易了解类之间的层次。
 
 03/12/21 01:31 酷帖!    臭帖!    回复  
酷帖评价:           臭帖评价:
返回页首