本帖最后由 古月不傲 于 2020-11-16 12:52 编辑
[C++] 纯文本查看 复制代码 #include <iostream>
#include <arpa/inet.h>
#include <sys/socket.h>
using namespace std;
// proxy模式
namespace proxy_pattern
{
// 访问服务
class abstract_access_service
{
public:
virtual void access_web(sockaddr &addr) = 0;
virtual ~abstract_access_service() {}
};
// 访问油管
class access_youtube : public abstract_access_service
{
public:
virtual void access_web(sockaddr &addr) override {
printf("访问油管\n");
}
};
// proxy
class proxy : public abstract_access_service
{
public:
proxy(abstract_access_service *ab) : m_ab(ab) {}
virtual void access_web(sockaddr &addr) override {
// can do something;
this->m_ab->access_web(addr);
// can do something;
}
private:
abstract_access_service *m_ab;
};
}
// 可以看出proxy模式和策略模式的区别 proxy模式需要继承 策略不需要继承 因此细节处理就不用
// proxy模式最大的作用就是解耦合 中途可以改变一些行为 而不必修改真实的类
int main(void)
{
using namespace proxy_pattern;
abstract_access_service *youtube = new access_youtube;
abstract_access_service *p = new proxy(youtube);
sockaddr addr;
p->access_web(addr);
delete p;
delete youtube;
return 0;
} |