FACADE 퍼사드
 -복잡한 서브클래스들을 인터페이스를 통해 쉽게 사용 가능하도록 함. 종속성 최소화.
 -퍼사드를 창구라고도 하며, 창구를 만들어 인터페이스를 모아 둔다.




class SubSystemA{ public: void operation() { cout << "SubSystemA Operation" << endl;} }; class SubSystemB{ public: void operation() { cout << "SubSystemB Operation" << endl;} }; class SubSystemC{ public: void operation() { cout << "SubSystemC Operation" << endl;} }; class Facade{ public: Facade(SubSystemA* a , SubSystemB* b, SubSystemC* c) : SysteamA(a), SysteamB(b), SysteamC(c) {} void operation() { SysteamA->operation(); SysteamB->operation(); SysteamC->operation(); } private: SubSystemA* SysteamA; SubSystemB* SysteamB; SubSystemC* SysteamC; }; int main(){ SubSystemA A; SubSystemB B; SubSystemC C; Facade _Facade(&A, &B, &C); _Facade.operation(); return 0; }


DECORATOR 장식자 패턴
 -객체에 동적으로 새로운 기능을 추가 한다.
 -다른 객체에 영향을 주지 않고 새로운 기능 추가 가능.



class Component{ public: virtual void operation() = 0; }; class ConcreteComponet : public Component{ public: void operation() { cout << "ConcreteComponet" << endl; } }; class Decorator : public Component{ public: Decorator(Component* a) : _Componet(a) {} ~Decorator() { if(_Componet) delete _Componet; } void operation() { if(_Componet) _Componet->operation(); } private: Component* _Componet; }; class ConcreteDecorator : public Decorator{ public: ConcreteDecorator(Component* b) : Decorator(b) {} void operation() { Decorator::operation(); cout << "ConcreteDecorator" <<endl; } }; int main(){ Component* _Component = new ConcreteDecorator(new ConcreteDecorator(new ConcreteComponet)); _Component ->operation(); delete _Component ; return 0; }

class Component{ public: virtual int Cost() = 0; virtual void Order() = 0; }; class ConcreteComponet : public Component{ public: int Cost() { return 6000; } void Order() { cout << "부대찌개" << endl; } }; class Decorator : public Component{ public: Decorator(Component* a) : _Componet(a) {} ~Decorator() { if(_Componet) delete _Componet; } int Cost() {if(_Componet) return _Componet->Cost(); else 0;} void Order() { if(_Componet) _Componet->Order(); } private: Component* _Componet; }; class ConcreteDecoratorA : public Decorator{ public: ConcreteDecoratorA(Component* b) : Decorator(b) {} int Cost() { return Decorator::Cost() + 1000;} void Order() { Decorator::Order(); cout << "라면사리 추가" <<endl; } }; class ConcreteDecoratorB : public Decorator{ public: ConcreteDecoratorB(Component* b) : Decorator(b) {} int Cost() { return Decorator::Cost() + 2000;} void Order() { Decorator::Order(); cout << "떡사리 추가" <<endl; } }; int main(){ Component* pComponent = new ConcreteDecoratorA(new ConcreteDecoratorB(new ConcreteComponet)); pComponent->Order(); cout<<"비용 : "<<pComponent->Cost()<<endl; delete pComponent; return 0; }




STRATEGY 전략 패턴
 - 알고리즘을 교체가능 하게 하는 패턴.
 - 알고리즘의 인터페이스를 정의하고, 각각의 클래스별로 캡슐화 한 후 사용.
 - 결과는 같으나 결과를 만드는 방법이 여러개인 경우 사용.





//Strategy Interface class class Strategy{ public: virtual void AlgorithmInterface() = 0; }; //Strategy Algorithms class ConcreteStrategyA : public Strategy{ public: void AlgorithmInterface() override { cout<<"Call A"<<endl; }; }; class ConcreteStrategyB : public Strategy{ public: void AlgorithmInterface() override { cout<<"Call B"<<endl; }; }; class ConcreteStrategyC : public Strategy{ public: void AlgorithmInterface() override { cout<<"Call C"<<endl; }; }; //Context class Context{ public: Context() : _Strategy(0) {} ~Context() {if(_Strategy) delete _Strategy;} void ChangeStrategy(Strategy* pStrategy){ if(_Strategy) delete _Strategy; _Strategy= pStrategy; } void ContextInerface() { _Strategy->AlgorithmInterface(); } private: Strategy* _Strategy; }; //main int main(){ Context* _Context = new Context(); _Context ->ChangeStrategy(new ConcreteStrategyA()); _Context ->ContextInerface(); _Context ->ChangeStrategy(new ConcreteStrategyB()); _Context ->ContextInerface(); _Context ->ChangeStrategy(new ConcreteStrategyC()); _Context ->ContextInerface(); delete _Context ; return 0; }


적용 예제

//적용 예제 //Strategy Interface class class SortInterface{ public: virtual void DoSort() = 0; }; //Strategy Algorithms class QuickSort : public SortInterface{ public: void DoSort() override { cout<<"QuickSort"<<endl; }; }; class MergeSort : public SortInterface{ public: void DoSort() override { cout<<"MergeSort"<<endl; }; }; class BublleSort: public SortInterface{ public: void DoSort() override { cout<<"BublleSort"<<endl; }; }; //Context class SortManger{ public: SortManger() : _Sort(0) {} ~SortManger() {if(_Sort) delete _Sort;} void DoSort() { _Sort->DoSort(); } void ChangeSort(SortInterface* pSort){ if(_Sort) delete _Sort; _Sort= pSort; } private: SortInterface* _Sort; }; //main int main(){ SortManger* _Sort = new SortManger(); _Sort ->ChangeSort(new QuickSort()); _Sort ->DoSort(); _Sort ->ChangeSort(new MergeSort()); _Sort ->DoSort(); _Sort ->ChangeSort(new BublleSort()); _Sort ->DoSort(); delete _Sort ; return 0; }


git remote rm origin


재설치.

pip3 install tensorflow-gpu==1.8.0rc0



+ Recent posts