常常见到类例的语句,
main()
...
{
if(case A)...{
//do with strategy A
}else(case B)...{
//do with strategy B
}else(case C)...{
//do with strategy C
}
}
if(case A)...{
//do with strategy A
}else(case B)...{
//do with strategy B
}else(case C)...{
//do with strategy C
}
}
可不可以用oo的思想重构呢?
class
runner
...
{
do();
}
class A extends runner ... {
do()...{
//do with strategy A
}
}
class B extends runner ... {
do()...{
//do with strategy B
}
}
class C extends runner ... {
do()...{
//do with strategy C
}
}
main() ... {
runner.do();
}
do();
}
class A extends runner ... {
do()...{
//do with strategy A
}
}
class B extends runner ... {
do()...{
//do with strategy B
}
}
class C extends runner ... {
do()...{
//do with strategy C
}
}
main() ... {
runner.do();
}
这样main函数的语句简单多了。但类的数量也增多了。
那么客户端如何调用呢?用工厂模式来生产“产品”吧。
class
RunnerFactory{
runner getInstante( case ){
if ( case A) return new A();
else if ( case B) return new B();
else if ( case C) return new C();
}
}
runner getInstante( case ){
if ( case A) return new A();
else if ( case B) return new B();
else if ( case C) return new C();
}
}