文章目录
1. UML类图抽象2. 实例2.1 结果(结论先行)2.2 具体实现2.2.1 IHandler.h2.2.2 ConcreteHandler1.h2.2.3 ConcreteHandler2.h2.2.4 ConcreteHandler3.h
3. 职责链模式-相关链接
1. UML类图抽象
2. 实例
2.1 结果(结论先行)
main.cpp
#include "IHandler.h"
#include "ConcreteHandler1.h"
#include "ConcreteHandler2.h"
#include "ConcreteHandler3.h"
void test()
{
IHandler
* ph1
= new ConcreteHandler1();
IHandler
* ph2
= new ConcreteHandler2();
IHandler
* ph3
= new ConcreteHandler3();
ph1
->setSuccessor(ph2
);
ph2
->setSuccessor(ph3
);
int arrRequsets
[] = { 2,5,14,22,18,3,27,20 };
for each
(auto nRequest in arrRequsets
)
{
ph1
->handlerRequest(nRequest
);
}
delete ph1
;
delete ph2
;
delete ph3
;
ph1
= nullptr;
ph2
= nullptr;
ph3
= nullptr;
}
int main()
{
test();
system("pause");
return 0;
}
2.2 具体实现
2.2.1 IHandler.h
#pragma once
#include <iostream>
using namespace std
;
#define DECLARE_CLASS(name)\
public:\
virtual char* getClassName()\
{\
return #name;\
}
class IHandler
{
public:
DECLARE_CLASS(IHandler
)
public:
void setSuccessor(IHandler
* pSuccessor
) { m_pSuccessor
= pSuccessor
; }
virtual void handlerRequest(int nRequest
) = 0;
protected:
IHandler
* m_pSuccessor
{ nullptr };
};
2.2.2 ConcreteHandler1.h
#pragma once
#include "IHandler.h"
class ConcreteHandler1 :public IHandler
{
public:
DECLARE_CLASS(ConcreteHandler1
)
public:
virtual void handlerRequest(int nRequest
) override
;
};
void ConcreteHandler1
::handlerRequest(int nRequest
)
{
if (nRequest
>= 0 && nRequest
< 10)
{
cout
<< getClassName() << "\t处理请求\t" << nRequest
<< endl
;
}
else if (nullptr != m_pSuccessor
)
{
m_pSuccessor
->handlerRequest(nRequest
);
}
}
2.2.3 ConcreteHandler2.h
#pragma once
#include "IHandler.h"
class ConcreteHandler2 :public IHandler
{
public:
DECLARE_CLASS(ConcreteHandler2
)
public:
virtual void handlerRequest(int nRequest
) override
;
};
void ConcreteHandler2
::handlerRequest(int nRequest
)
{
if (nRequest
>= 10 && nRequest
< 20)
{
cout
<< getClassName() << "\t处理请求\t" << nRequest
<< endl
;
}
else if (nullptr != m_pSuccessor
)
{
m_pSuccessor
->handlerRequest(nRequest
);
}
}
2.2.4 ConcreteHandler3.h
#pragma once
#include "IHandler.h"
class ConcreteHandler3 :public IHandler
{
public:
DECLARE_CLASS(ConcreteHandler3
)
public:
virtual void handlerRequest(int nRequest
) override
;
};
void ConcreteHandler3
::handlerRequest(int nRequest
)
{
if (nRequest
>= 20 && nRequest
< 30)
{
cout
<< getClassName() << "\t处理请求\t" << nRequest
<< endl
;
}
else if (nullptr != m_pSuccessor
)
{
m_pSuccessor
->handlerRequest(nRequest
);
}
}
此为《大话设计模式》学习心得系列 P250~~
3. 职责链模式-相关链接
《大话设计模式》C++实现:24 职责链模式(一)请假加薪实例-初始版本 《大话设计模式》C++实现:24 职责链模式(二)请假加薪实例-改进