设计模式系列---代理模式

类图:

main.cpp

#ifndef SUBJECT_H
#define SUBJECT_H
class Subject
{
public:
    Subject(){}
    ~Subject(){}
    virtual void Request() = 0;
};

#endif

 

RealSubject.h

#ifndef REALSUBJECT_H
#define REALSUBJECT_H
#include "Subject.h"
class RealSubject : public Subject
{
public:
    RealSubject(){}
    ~RealSubject(){}
    virtual void Request();
};

#endif

 

RealSubject.cpp

#include "RealSubject.h"
#include <iostream>
void RealSubject::Request()
{
    std::cout << "RealSubject::Request()" << std::endl;
}

 

ProxySubject.h

#ifndef PROXYSUBJECT_H_
#define PROXYSUBJECT_H_
#include "Subject.h"
#include "RealSubject.h"

class ProxySubject : public Subject
{
public :
    ProxySubject(){}
    ~ProxySubject(){}
    virtual void Request();
    void PrevRequest();
    void AfterRequest();
private:
    RealSubject m_RealSubject;
};

#endif

 

ProxySubject.cpp

 

#include "ProxySubject.h"
#include <iostream>

void ProxySubject::Request()
{
    PrevRequest();
    m_RealSubject.Request();
    AfterRequest();
}


void ProxySubject::PrevRequest()
{
    std::cout << "ProxySubject::PrevRequest()" << std::endl;
}


void ProxySubject::AfterRequest()
{
    std::cout << "ProxySubject::AfterRequest()" << std::endl;
}

 

makefile

CPP = g++
CFLAGS = -g -Wall
TARGET = proxy
SOUR = $(wildcard *.cpp)
DEST = $(patsubst %.cpp, %.o, $(SOUR))

all : $(DEST)
    $(CPP) $$(find ./ -name '*.o') -o $(TARGET)
%.o : %.cpp
    $(CPP) $(CFLAGS) -c $< -o $@

clean:
    rm *.o $(TARGET)

 

posted @ 2015-05-13 22:35  intruder83  阅读(178)  评论(0编辑  收藏  举报