请教工厂方法的一个应用问题

04-11-23 noizz
譬如说我要生产一组产品,这组产品有一些共性,于是用一个

ProductMgr来管理共性的东西

当遇到专有的东西时

用一个工厂方法来处理

if( needSpecialProcess){

ProductCommand command1 = ProductFactory.getFactory(productId);

command1.createProduct();

}

这些没有问题。

但是,后来发现几种command里面又有一些共性的操作。这时该怎么设计呢?

现在有方案

1)沿用原来的结构,不改变。这样就是每种command都要做一些相同的操作。

2)将共性的操作抽取到一个公共方法,如 function.doBeforeCreate(ProductCommand command)。每个Command里再去调用这些方法。

3) 将共性的操作抽取到一个新类。

if( needSpecialProcess){

new CommonCommand().createProduct();

}

在CommandCommand里,先处理共性的操作。然后再调用工厂方法处理专有操作。

要考虑效率问题,又要兼顾结构。该怎么选呢?或者有更好的方案?

    

banq
2004-11-23 20:50
将共性的操作抽取到一个新类,然后你的command继承这个新类,客户端调用代码不必修改。

knight_qmh
2004-11-29 10:44
XXProductCommand extends/imp... ProductCommand

{

public XXProductCommand(ProductCommand command)

...

public ... createProduct()

{

//dobefore();

command.createProduct();

//doend();

}

}

猜你喜欢