⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strategy.c

📁 design_patterns code设计模式书中的源码 对学习设计模式的人很有帮助的
💻 C
字号:
/**/#ifdef Consequences1/**/class Composition {  public:    void Repair();    void ComposeWithSimpleCompositor();    void ComposeWithTeXCompositor();    int _breakingStrategy;};const int SimpleStrategy = 1;const int TeXStrategy = 2;/**/void Composition::Repair () {    switch (_breakingStrategy) {    case SimpleStrategy:        ComposeWithSimpleCompositor();        break;    case TeXStrategy:        ComposeWithTeXCompositor();        break;    // ...    }    // merge results with existing composition, if necessary}/**/#endif/**/#ifdef Consequences2class Compositor {    public:    void Compose();};class Composition {  public:    void Repair();    Compositor* _compositor;};/**/void Composition::Repair () {    _compositor->Compose();    // merge results with existing composition, if necessary}/**/#endif/**/#ifdef Implementation/**/template <class AStrategy>class Context {    void Operation() { theStrategy.DoAlgorithm(); }    // ...private:    AStrategy theStrategy;};/**/class MyStrategy {public:    void DoAlgorithm();};Context<MyStrategy> aContext;/**/#endif/**/#ifdef SampleCode#include "Geom.H"/**/class Compositor;class Component;/**/class Composition {public:    Composition(Compositor*);    void Repair();private:    Compositor* _compositor;    Component* _components;    // the list of components    int _componentCount;       // the number of components    int _lineWidth;            // the Composition's line width    int* _lineBreaks;          // the position of linebreaks                               // in components    int _lineCount;            // the number of lines};/**/class Compositor {public:    virtual int Compose(        Coord natural[], Coord stretch[], Coord shrink[],        int componentCount, int lineWidth, int breaks[]    ) = 0;protected:    Compositor();};/**/Coord coords[] = {    1,2,3};int b[] = {    1,2,2};/**/void Composition::Repair () {    Coord* natural;    Coord* stretchability;    Coord* shrinkability;    int componentCount;    int* breaks;    // prepare the arrays with the desired component sizes    // .../**/    // kills comiler warnings    natural = coords;    stretchability = coords;    shrinkability = coords;    componentCount = 1;    breaks = b;/**/    // determine where the breaks are:    int breakCount;    breakCount = _compositor->Compose(        natural, stretchability, shrinkability,        componentCount, _lineWidth, breaks    );/**/    // lay out components according to breaks    // ...}/**/class SimpleCompositor : public Compositor {public:    SimpleCompositor();    virtual int Compose(        Coord natural[], Coord stretch[], Coord shrink[],        int componentCount, int lineWidth, int breaks[]    );    // ...};/**/class TeXCompositor : public Compositor {public:    TeXCompositor();    virtual int Compose(        Coord natural[], Coord stretch[], Coord shrink[],        int componentCount, int lineWidth, int breaks[]    );    // ...};/**/class ArrayCompositor : public Compositor {public:    ArrayCompositor(int interval);    virtual int Compose(        Coord natural[], Coord stretch[], Coord shrink[],        int componentCount, int lineWidth, int breaks[]    );    // ...};/**/Composition* quick = new Composition(new SimpleCompositor);Composition* slick = new Composition(new TeXCompositor);Composition* iconic = new Composition(new ArrayCompositor(100));/**/#endif/**/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -