b*****a 发帖数: 11 | 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# |
c*****t 发帖数: 1879 | 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只放一处?
|
b*****a 发帖数: 11 | 3 thanks!
【在 c*****t 的大作中提到】 : 只要记住一点,所谓的 pattern 其实就是如何将 code, varaible, : object 等参数化。 : delegate void CodeBlock (); : void myExec (CodeBlock block11, CodeBlock block2) : { : ... : block1 (); : ... : block2 (); : ...
|
q**1 发帖数: 193 | 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只放一处?
|
q**1 发帖数: 193 | 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();
|
q**1 发帖数: 193 | 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 (); : ...
|