C++类模式:

// Target类,目标接口
class Earphone {
public:
    virtual void play() = 0;
};

// Adaptee类,被适配接口
class ThreeFiveMillimeterEarphone {
public:
    void playWith3_5mm() {
        std::cout << "使用3.5mm接口播放音乐" << std::endl;
    }
};

class TwoFiveMillimeterEarphone {
public:
    void playWith2_5mm() {
        std::cout << "使用2.5mm接口播放音乐" << std::endl;
    }
};

class UsbTypeCEarphone {
public:
    void playWithUsbTypeC() {
        std::cout << "使用USB Type-C接口播放音乐" << std::endl;
    }
};

class LightingEarphone {
public:
    void playWithLighting() {
        std::cout << "使用Lighting接口播放音乐" << std::endl;
    }
};

// Adapter类,适配器
class ThreeFiveMillimeterEarphoneAdapter : public Earphone {
private:
    ThreeFiveMillimeterEarphone* earphone;
public:
    ThreeFiveMillimeterEarphoneAdapter(ThreeFiveMillimeterEarphone* earphone) {
        this->earphone = earphone;
    }
    virtual void play() {
        earphone->playWith3_5mm();
    }
};

class TwoFiveMillimeterEarphoneAdapter : public Earphone {
private:
    TwoFiveMillimeterEarphone* earphone;
public:
    TwoFiveMillimeterEarphoneAdapter(TwoFiveMillimeterEarphone* earphone) {
        this->earphone = earphone;
    }
    virtual void play() {
        earphone->playWith2_5mm();
    }
};

class UsbTypeCEarphoneAdapter : public Earphone {
private:
    UsbTypeCEarphone* earphone;
public:
    UsbTypeCEarphoneAdapter(UsbTypeCEarphone* earphone) {
        this->earphone = earphone;
    }
    virtual void play() {
        earphone->playWithUsbTypeC();
    }
};

class LightingEarphoneAdapter : public Earphone {
private:
    LightingEarphone* earphone;
public:
    LightingEarphoneAdapter(LightingEarphone* earphone) {
        this->earphone = earphone;
    }
    virtual void play() {
        earphone->playWithLighting();
    }
};

// Test
int main() {
    Earphone* earphone1 = new ThreeFiveMillimeterEarphoneAdapter(new ThreeFiveMillimeterEarphone());
    earphone1->play();
    Earphone* earphone2 = new TwoFiveMillimeterEarphoneAdapter(new TwoFiveMillimeterEarphone());
    earphone2->play();
    Earphone* earphone3 = new UsbTypeCEarphoneAdapter(new UsbTypeCEarphone());
    earphone3->play();
    Earphone* earphone4 = new LightingEarphoneAdapter(new LightingEarphone());
    earphone4->play();
    return 0;
}

对象模式:

// Target类,目标接口
class Earphone {
public:
    virtual void play() = 0;
};

// Adaptee类,被适配接口
class ThreeFiveMillimeterEarphone {
public:
    void playWith3_5mm() {
        std::cout << "使用3.5mm接口播放音乐" << std::endl;
    }
};

class TwoFiveMillimeterEarphone {
public:
    void playWith2_5mm() {
        std::cout << "使用2.5mm接口播放音乐" << std::endl;
    }
};

class UsbTypeCEarphone {
public:
    void playWithUsbTypeC() {
        std::cout << "使用USB Type-C接口播放音乐" << std::endl;
    }
};

class LightingEarphone {
public:
    void playWithLighting() {
        std::cout << "使用Lighting接口播放音乐" << std::endl;
    }
};

// Adapter类,适配器
class EarphoneAdapter : public Earphone {
private:
    ThreeFiveMillimeterEarphone* earphone1;
    TwoFiveMillimeterEarphone* earphone2;
    UsbTypeCEarphone* earphone3;
    LightingEarphone* earphone4;
    int type;
public:
    EarphoneAdapter(ThreeFiveMillimeterEarphone* earphone) {
        earphone1 = earphone;
        type = 1;
    }
    EarphoneAdapter(TwoFiveMillimeterEarphone* earphone) {
        earphone2 = earphone;
        type = 2;
    }
    EarphoneAdapter(UsbTypeCEarphone* earphone) {
        earphone3 = earphone;
        type = 3;
    }
    EarphoneAdapter(LightingEarphone* earphone) {
        earphone4 = earphone;
        type = 4;
    }
    virtual void play() {
        switch (type) {
        case 1:
            earphone1->playWith3_5mm();
            break;
        case 2:
            earphone2->playWith2_5mm();
            break;
        case 3:
            earphone3->playWithUsbTypeC();
            break;
        case 4:
            earphone4->playWithLighting();
            break;
        default:
            break;
        }
    }
};

// Test
int main() {
    Earphone* earphone1 = new EarphoneAdapter(new ThreeFiveMillimeterEarphone());
    earphone1->play();
    Earphone* earphone2 = new EarphoneAdapter(new TwoFiveMillimeterEarphone());
    earphone2->play();
    Earphone* earphone3 = new EarphoneAdapter(new UsbTypeCEarphone());
    earphone3->play();
    Earphone* earphone4 = new EarphoneAdapter(new LightingEarphone());
    earphone4->play();
    return 0;
}
``

原文地址: https://www.cveoy.top/t/topic/hjjI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录