首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解策略模式

理解策略模式
EN

Stack Overflow用户
提问于 2014-09-03 01:41:54
回答 2查看 192关注 0票数 1

我在网上到处寻找策略模式的好例子,但我找到的例子都很简单。

我想实现MyMatrix类。为此,我使用了策略模式,即我创建了一个Matrix类和两个继承类: RegMatrix和SparseMatrix,它们在实现上有所不同。

我知道MyMatrix应该保存一个指向矩阵的指针(让我们称之为*_matrix),然后如果我想实现MyMatrix的"print“函数,我应该做:_ Matrix ->print(),然后它选择适当的实现。

我唯一不理解的是:在MyMatrix的构造函数中,它获取一个数组和矩阵大小,我是否需要选择某个matrix类型的对象并初始化它?我是说,我该这么做吗:

代码语言:javascript
复制
MyMatrix::MyMatrix(double arr[], unsigned int colSize, unsigned int rowSize)
{
    _colSize = colSize;
    _rowSize = rowSize;
    _matrix = new RegMatrix(arr, colSize, rowSize);
}
EN

回答 2

Stack Overflow用户

发布于 2014-09-03 01:59:03

常见的变体是将接口(Matrix)的实例传递给构造函数。

代码语言:javascript
复制
MyMatrix::MyMatrix(const Matrix& behaviour):
  colSize(behaviour.getCols()), rowSize(behaviour.getRows()), matrix(behaviour)
{
}

// creation
MyMatrix m(SparseMatrix(4, 2, arr));

使用初始化器。不要使用多余的下划线。请参阅Alf的评论。可能不需要colSize和rowSize,因为它们在矩阵实现中是重复的。

票数 3
EN

Stack Overflow用户

发布于 2014-09-03 02:15:23

在C++中,std::function可以看作是策略模式的通用实现。“模式”这个词意味着不能有具体的通用实现,但处理这个矛盾并不困难。例如,通过简单地忽略它。

在我看来,C++中策略模式的一个很好的例子是一个通用的清理工具,一个作用域保护。在C++03中实现作用域保护涉及到处理策略模式的内部方面,例如指向实现的指针,Petru Marginean发明了an ingenious way来利用临时绑定到引用的生命周期扩展。在C++11中,作用域保护类很容易用std::function表示

代码语言:javascript
复制
class Scope_guard
{
private:
    function<void()> cleanup_;

    Scope_guard( Scope_guard const& ) = delete;
    Scope_guard& operator=( Scope_guard const& ) = delete;

public:
    void dismiss() { cleanup_ = []{}; }

    ~Scope_guard() { cleanup_(); }

    Scope_guard( function<void()> const& cleanup )
        : cleanup_( cleanup )
    {}
};

并像这样使用

代码语言:javascript
复制
void foo()
{
    Handle const       h = createThingy();
    Scope_guard const  h_cleanup( [=]{ destroyThingy( h ); } );

    // Using h here.
}

为了能直接使用C风格的界面,用C++风格编码。

免责声明1:编译器手中未触及的代码。

免责声明2:虽然这与策略模式在实现方面相同,但简单的清理,即单个操作,是否是一个“算法”的问题还不完全清楚。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25629247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档