设计模式(4) 原型模式(Prototype)(二)

2014-11-24 03:26:55 · 作者: · 浏览: 1
如Wall的实例,必须支持Clone操作。它还必须有一个拷贝构造器用于克隆 如BombedWall子类必须重定义Clone并实现相应的拷贝构造器
class BombedWall : public Wall {
public:
    BombedWall();
    BombedWall(const BombedWall&);

    virtual Wall* Clone() const;
    bool HasBomb();
};

BombedWall::BombedWall (const BombedWall& other) : Wall(other)
{
    _bomb = other._bomb;
}

Wall* BombedWall::Clone() const {     // 虽然BombedWall::Clone返回一个Wall*, 但是它的实现返回了一个指向子类的新实例的指针,即BombedWall*.
    return new BombedWall( *this );
}

相关模式 Prototype和Abstract Factory模式在某种方面是相互竞争的。但是它们也可以一起使用,Abstract Factory可以存储一个被克隆的原型的集合,并且返回产品对象。大量使用Composite和Decorator模式的设计通常也可以从Prototype模式处获益。

参考资料: 《设计模式》