结构型模式-代理(proxy)

来源:互联网 发布:网络教育统考报名时间 编辑:程序博客网 时间:2024/06/05 05:43

代理

为其他对象提供一种代理以控制对这个对象的访问.

实例

main.cc:

#include "runner.h"#include "runner_proxy.h"#include <windows.h>using namespace std;/*design_pattern:"proxy"December 10, 2016, Xiamen marathon sudden death occurs, one of the players for the runreal runner:linproxy runner:wu*/int main(){    Runner *runner = new Runner("lin");    RunnerProxy *runner_proxy = new RunnerProxy("wu");    runner_proxy->SetRunner(runner);    runner_proxy->Run();    //clear    delete runner;    delete runner_proxy;    system("Pause");    return 0;}

Person:

//person.h#ifndef HELENDP_SOURCE_PERSON_H_#define HELENDP_SOURCE_PERSON_H_#include <string>using namespace std;class Person{public:    Person(string name);    virtual ~Person();    virtual void Run();    string GetName();private:    string name_;};#endif//person.cc#include "person.h"Person::Person(string name){    name_ = name;}Person::~Person(){}void Person::Run(){}string Person::GetName(){    return name_;}

Runner:

//runner.h#ifndef HELENDP_SOURCE_RUNNER_H_#define HELENDP_SOURCE_RUNNER_H_#include "person.h"class Runner : public Person{public:    Runner(string name);    ~Runner();    void Run();};#endif//runner.cc#include "runner.h"#include <iostream>using namespace std;Runner::Runner(string name)    :Person(name){}Runner::~Runner(){}void Runner::Run(){    cout << this->GetName() << " " << "run in xiamen marathon" << endl;}

RunnerProxy:

//runner_proxy.h#ifndef HELENDP_SOURCE_RUNNER_PROXY_H_#define HELENDP_SOURCE_RUNNER_PROXY_H_#include "person.h"#include "runner.h"class RunnerProxy : public Person{public:    RunnerProxy(string name);    ~RunnerProxy();    void Run();    void SetRunner(Runner *runner);private:    Runner *runner_;};#endif//runner_proxy.cc#include "runner_proxy.h"#include <iostream>using namespace std;RunnerProxy::RunnerProxy(string name):Person(name){}RunnerProxy::~RunnerProxy(){}void RunnerProxy::SetRunner(Runner *runner){    runner_ = runner;}void RunnerProxy::Run(){    runner_->Run();}

代码和UML图(EA)工程文件,最后会整理打包上传.

UML类图

这里写图片描述

结构

  • Subject(Person):抽象类.
  • Porxy(RunnerProxy):代理类.
  • RealSubject(Runner):真实对象类.

优点

  • 代理模式能够协调调用者和被调用者,在一定程度上降低了系 统的耦合度.
  • 远程代理使得客户端可以访问在远程机器上的对象,远程机器 可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求.
  • 虚拟代理通过使用一个小对象来代表一个大对象,可以减少系 统资源的消耗,对系统进行优化并提高运行速度.
  • 保护代理可以控制对真实对象的使用权限.

缺点

  • 由于在客户端和真实主题之间增加了代理对象,因此 有些类型的代理模式可能会造成请求的处理速度变慢.
  • 实现代理模式需要额外的工作,有些代理模式的实现非常复杂.
0 0