C++/Adapter pattern

Printer logger Class Adapter

(18020)

Printer 와 Logger 클래스를 다중상속 받은 PrintLogger를 만들어서 App 객체로 하여금 사용하여 로그를 남길 수 있게 한다.
(Hint) PrintLogger의 유일한 인터페이스는 void log(char *)이며 결과는 화면에 스트링이 출력되는 것이다.


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
using namespace std;

// Logger클래스는 abstract class로서 인터페이스를 상속받기 위한 것이다.
class Logger{
        public:
                virtual void log(string)=0;
};

// Printer 클래스는 이미 만들어져 있는 것.
// 실제 implementation이 있는 함수인 print를 사용하기 위하여 상속받는다.
class Printer{
        public:
                void print(string msg){
                        // 진짜 프린터는 없으므로 이 출력이 프린터 출력이라고 생각하자.
                        cout << "프린터에 출력합니다. " << msg << endl;
                }
};

class PrintLogger :public Logger, public Printer{  // 1. 다중 상속을 받는다.
        public:
                // log method를 구현한다.
                // log method 는 단순히 받은 string을 출력하면 된다.
                void log(string s){
                        // 상속받은 함수를 이용하여 s 를 출력한다.
                        //cout<<s<<endl;
                        print(s);
                }
};


// App 은 Logger를 이용하는 응용 클래스이다.
class App{
        private:
                Logger *mylogger;
        public:
                App(Logger *pl){  mylogger = pl ; }  // 초기화.
                void start(){
                        for (int i=0; i<5; i++){
                                mylogger->log( "홍길동: 시스템 이상 무.");
                        }
                }
};

int main(){
        App *r1;

        r1 = new App(new PrintLogger);
        r1->start();
}

'C++ > Adapter pattern' 카테고리의 다른 글

Print logger Object Adapter  (0) 2021.01.24
다중상속 기초  (0) 2021.01.24