设计模式系列---代理模式
类图:
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)