avatar
请教一个design的问题# Programming - 葵花宝典
b*a
1
我有一些程序share了一些common code:
same code 1
try {
same code 2
different code 1
same code 3
different code 2
}
same code 4
我怎么能最好的design好把这些same code只放一处?
我现在用的是GoF的template method pattern,
在base class里面写进上面的code,
然后child class override 那几个different code snippet.
这样子class数量暴多
感觉这些被我当作child class的实际上更像是不同的object。
当然另外一个方案就是switch了,这个也太难看了。
但是除了inheritance 实在想不出其他好的办法。
那位高手帮我看看?谢谢
另外,我用的是C#
avatar
c*t
2
只要记住一点,所谓的 pattern 其实就是如何将 code, varaible,
object 等参数化。
delegate void CodeBlock ();
void myExec (CodeBlock block11, CodeBlock block2)
{
...
block1 ();
...
block2 ();
...
}

【在 b*****a 的大作中提到】
: 我有一些程序share了一些common code:
: same code 1
: try {
: same code 2
: different code 1
: same code 3
: different code 2
: }
: same code 4
: 我怎么能最好的design好把这些same code只放一处?

avatar
b*a
3
thanks!

【在 c*****t 的大作中提到】
: 只要记住一点,所谓的 pattern 其实就是如何将 code, varaible,
: object 等参数化。
: delegate void CodeBlock ();
: void myExec (CodeBlock block11, CodeBlock block2)
: {
: ...
: block1 ();
: ...
: block2 ();
: ...

avatar
q*1
4
不知道你可不可以这样做:
base class 里面包含methods to handle "same_code_[1234]" and
a reference to an object of type implementor(assume we
name it 'imp')which defines the interfaces for different
implement classes, and
implement-1 class 定义 different_code_[12]
implement-2 class 定义 different_code_[12]
.....
然后你的code变成:
same_code_1();
try {
same_code_2();
imp->different_code_1();
same_code_3();
imp->different_code_2();
}
same_code_4();
具体的implement可以在程序中制定,用dispatch-table
or whatever。。。

【在 b*****a 的大作中提到】
: 我有一些程序share了一些common code:
: same code 1
: try {
: same code 2
: different code 1
: same code 3
: different code 2
: }
: same code 4
: 我怎么能最好的design好把这些same code只放一处?

avatar
q*1
5
BTW. it is about "Bridge" in GOF.

【在 q**1 的大作中提到】
: 不知道你可不可以这样做:
: base class 里面包含methods to handle "same_code_[1234]" and
: a reference to an object of type implementor(assume we
: name it 'imp')which defines the interfaces for different
: implement classes, and
: implement-1 class 定义 different_code_[12]
: implement-2 class 定义 different_code_[12]
: .....
: 然后你的code变成:
: same_code_1();

avatar
q*1
6
As a rule of thumb with DP:
programming to an interface not an implementation
I am expecting more (discussion|input) abt this topics..

【在 c*****t 的大作中提到】
: 只要记住一点,所谓的 pattern 其实就是如何将 code, varaible,
: object 等参数化。
: delegate void CodeBlock ();
: void myExec (CodeBlock block11, CodeBlock block2)
: {
: ...
: block1 ();
: ...
: block2 ();
: ...

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。