Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2468873
  • 博文数量: 392
  • 博客积分: 7040
  • 博客等级: 少将
  • 技术积分: 4138
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-17 13:03
个人简介

范德萨发而为

文章分类

全部博文(392)

文章存档

2017年(5)

2016年(19)

2015年(34)

2014年(14)

2013年(47)

2012年(40)

2011年(51)

2010年(137)

2009年(45)

分类:

2010-03-13 11:10:35

主要用于算法的多选择


class Composition {
public:
    Composition(Compositor *);
    void Repair();
private:
    Compositor *_compositor;
    Component *_component;
    int _componentCount;
    int _lineWidth;
    int *_lineBreaks;

    int _lineCount;
};

class Compositor {
public:
    virtual int Compose {
        Coord natural[], Coord stretch[], Coord shrink[], int componentCount, int lineWidth, int breaks[]) = 0;
protected:
    Compositor();
    }
};

void Composition::Repair() {
    Coord *natural;
    Coord *stretchability;
    Coord *shrinkability;
    int componentCount;
    int *breaks;

    //determine where the breaks are

    int breakCount;
    breakCount = _compositor->Compose(natural, strechability, shrinkability, componentCount, _lineWidth, breaks);
}


class SimpleCompositor : public Compositor {
public:
    SimpleCompositor();
 
    vitual int Compose(Coord natural, Coord stretch[], Coord shrink, int componentCount, int lineWidth, int breaks[]);
    //...

};

class TexCompositor : public Compositor {
public:
    TexCompositor();
    
    vitual int Compose(Coord natural, Coord stretch[], Coord shrink, int componentCount, int lineWidth, int breaks[]);
};

class ArrayCompositor : public Compositor {
public:
    ArrayCompositor();
    
    vitual 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);


设计模式之理解:
1.Composition类通过构造函数来选择需要使用的Compositor,并且Composition类通过repaire函数调用Compositor的Compose方法
2.Compositor为所有的子类提供一个统一的借口Compose方法,所有子类都要实现这一方法
3.这样只要在初始化Compositon是选择需要的Compositor子类,那么通过Compositon->Repair()方法就可以调用到Compositor中的Compose方法。这样可以保持代码的通用性,只需要在初始化是选择需要的Compositor子类就行,其余代码都是一样的
阅读(1037) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~