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

譬如说我要生产一组产品,这组产品有一些共性,于是用一个
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里,先处理共性的操作。然后再调用工厂方法处理专有操作。

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

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

XXProductCommand extends/imp... ProductCommand
{
public XXProductCommand(ProductCommand command)
...

public ... createProduct()
{
//dobefore();
command.createProduct();
//doend();
}
}