1.设计模式入门-策略模式

《HEAD FIRST 设计模式》在第一章设计模式入门中介绍了策略模式(Strategy Pattern)。

定义


策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

类图


策略模式

抽象类strategy作为接口定义。strategy_1和strategy_2分别实现了两种具体的策略。用户User可通过set方法设置策略。

代码


//策略接口:strategy.h
class strategy_interface
{
    vitual void algorithm() = 0;
} ;

class strategy_1: public strategy_interface
{
    void algorithm();
};

class strategy_2: public strategy_interface
{
    void algorithm();
};
// strategy.cpp
#include <stdio.h>
void strategy_1::algorithm()
{
    printf("this is strategy_1\n");
}

void strategy_2::algorithm()
{
    printf("this is strategy_2\n");
}
// user.h
class strategy_interface;
class user
{
    public:
        void Algorithm();
        void set_strategy(strategy_interface* ptr);
    private:
        strategy_interface* s_ptr;
};
// user.cpp
include "strategy.h"
void user::Algorithm()
{
    if (s_ptr !=  NULL) s_ptr->algorithm();
    else printf("no strategy for user\n");
}

void user::set_strategy(strategy_interface* ptr)
{
    s_ptr = ptr;
}

笔记


1.把变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。
2.多用组合,少用继承。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 报价管理## 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的...
    七寸知架构阅读 5,133评论 9 62
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,441评论 25 708
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,842评论 2 17
  • 我想说不管琦琦做什么我都会陪着她保护她 人生有很多想得通的不得已和想不通的难以自持 说长也不长说短也不短得人生 ...
    茵陈_阅读 158评论 0 0
  • 众所周知,我在学校工作 可现在的中学里头的女孩子 和过去不同了,真不同了 她们把年纪掩藏在校服底下 而后呢?我是说...
    孙陆辰阅读 640评论 2 0