设计模式

2017-11-15  本文已影响0人  3cbba3c8e19b

观察者模式


observation

subject(base class)

做为数据消息发布的主体,可以注册和删除观察者,维护所有注册的观察者。每个观察者可以记录一个指针指向subject主体,可以查询subject的状态

observer

update接口,可以根据subject发送过来的信息进行筛选过滤,然后更新自身的状态。

变种:发布者订阅模式

image.png

策略模式


strategy
#define _STRATEGY_H_

class Strategy
{
public:
    ~Strategy();
    virtual void AlgrithmInterface()=0;
protected:
    Strategy();
private:
};

class ConcreteStrategyA : public Strategy
{
public:
    ConcreteStrategyA();
    ~ConcreteStrategyA();
    virtual void AlgrithmInterface();
protected:
private:
};

class ConcreteStrategyB : public Strategy
{
public:
    ConcreteStrategyB();
    ~ConcreteStrategyB();
    virtual void AlgrithmInterface();
protected:
private:
};

/*这个类是Strategy模式的关键,
  也是Strategy模式和Template模式的根本区别所在。
  *Strategy通过“组合”(委托)方式实现算法(实现)的异构,
  而Template模式则采取的是继承的方式
  这两个模式的区别也是继承和组合两种实现接口重用的方式的区别
*/
class Context
{
public:
    Context(Strategy*);
    ~Context();
    void DoAction();
private:
    Strategy* _strategy;
};
#endif

策略模式的优点

策略模式的缺点


工厂模式


factory

抽象工厂模式

abstract factory

例如Linux和windows两种操作系统下,有2个挂件A和B,他们在Linux和Windows下面的实现方式不同,Factory1负责产生能在Linux下运行的挂件A和B,Factory2负责产生能在Windows下运行的挂件A和B,这样如果系统环境发生变化了,我们只需要修改工厂就行了。

上一篇 下一篇

猜你喜欢

热点阅读