Пример #1
0
int main(int argc, char *argv[])
{
    Strategy *psA = new ConcreteStrategyA();
    Strategy *psB = new ConcreteStrategyB();
    Context pcA = Context(psA);
    Context pcB = Context(psB);

    pcA.DoAction();
    pcB.DoAction();

    delete psA;
    delete psB;

    return 0;
}
Пример #2
0
void test_strategy()
{
	Strategy* stg = new ConcreteStrategyA;
	Context* ctt = new Context(stg);
	ctt->DoAction();

	delete stg;
	delete ctt;
}
Пример #3
0
int 
main(int argc, char* argv[])
{
    Strategy* ps;
    ps = new ConcreteStrategyA();
    Context* pc = new Context(ps);
    pc->DoAction();
    if(NULL!=pc)
        delete pc;
    return 0;
}
Пример #4
0
int main(int argc, char *argv[])
{
    /*
    Strategy模式和Template模式实际是实现一个抽象接口的两种方式:继承和组合之间的区别。
    要实现一个抽象接口,继承是一种方式:我们将抽象接口声明在基类中,将具体的实现放在具体子类中。
    组合(委托)是另外一种方式:我们将接口的实现放在被组合对象中,将抽象接口放在组合类中。
    这两种方式各有优缺点
    */
    //策略A与B可替换
    Strategy* pStr = new ConcreteStrategyA();
    Context* pcon = new Context(pStr);
    pcon->DoAction();

    pStr = new ConcreteStrategyB();
    pcon = new Context(pStr);
    pcon->DoAction();

    std::cin.get();

    return 0;
}
Пример #5
0
///Strategy 策略模式则通过组合(委托) 来达到和 Template 模式类似的效果,其代价就是空间和时间上的代价
///Strategy 模式和 Template 模式要解决的问题是相同(类似)的,都是为了给业务逻辑(算 法)具体实现和抽象接口之间的解耦。Strategy 模式将逻辑(算法)封装到一个类(Context) 里面,通过组合的方式将具体算法的实现在组合对象中实现,再通过委托的方式将抽象接口 的实现委托给组合对象实现。State 模式也有类似的功能
//////Bridge模式和Strategy模式相似就是因为他们都将任务委托给了另外一个接口的具体实现,他们之间的区别在于Bridge的目的是让底层实现和上层接口可以分别演化,从而提高移植性而Strategy的目的是将复杂的算法封装起来,从而便于替换不同的算法。
///以相对策略模式,桥接模式要表达的内容要更多,结构也更加复杂。桥接模式表达的主要意义其实是接口隔离的原则,即把本质上并不内聚的两种体系区别 开来,使得它们可以松散的组合,而策略在解耦上还仅仅是某一个算法的层次,没有到体系这一层次。从结构图中可以看到,策略的结构是包容在桥接结构中的,桥接中必然存在着策略模式
void StrategyTest() {
    Strategy* ps = new ConcreteStrategyA();
    Context* pc = new Context(ps);
    pc->DoAction();
}