#pragma once ///////////////////////////////////////////////////////////////////////// // ClassAdapter.h - Declarations for Skeleton Class Adapter Components // // // // Jim Fawcett, CSE776 - Design Patterns, Fall 2014 // ///////////////////////////////////////////////////////////////////////// #include // primary Target Hierarchy struct Target { virtual ~Target() {} virtual std::string doTargetOperation() = 0; }; class TargetImpl : public Target { public: static Target* create() { return new TargetImpl; } virtual std::string doTargetOperation() { return "\n TargetImpl here"; } }; // secondary Adaptee Hierarchy struct Adaptee { virtual ~Adaptee() {} virtual std::string doAdapteeOperation() = 0; }; class AdapteeImpl : public Adaptee { public: static Adaptee* create() { return new AdapteeImpl; } virtual std::string doAdapteeOperation() override { return "\n adapteeImpl here"; } }; // pulling AdapteeImpl into Target Hierarchy with Class Adapter class ClassAdapter : public Target, private AdapteeImpl { public: static Target* create() { return new ClassAdapter; } ClassAdapter() { // may need to do stuff here }; virtual ~ClassAdapter() {} virtual std::string doTargetOperation() override { return std::string("\n Class Adapter using Adaptee:") + doAdapteeOperation(); // inherited from AdapteeImpl } }; class Factory { public: static Target* create(int i) { switch (i) { case 0: return TargetImpl::create(); break; case 1: return ClassAdapter::create(); break; default: return nullptr; } } };