`

[结构型模式] 适配器模式的理解

 
阅读更多



头文件
//AdapterPattern.h

#ifndef ADAPTER_PATTERN_H
#define ADAPTER_PATTERN_H

#include <Windows.h>

namespace AdapterPattern
{
    class Adaptee
    {
    public:
        Adaptee();
        ~Adaptee();
        void SpecificRequest();
    };

    // Base Class
    //////////////////////////////////////////////////////////////////////////
    class Adapter
    {
    public:
        Adapter();
        virtual ~Adapter();
        virtual void Request() = 0;
    };

    class ConcreteAdapterA : public Adapter
    {
    public:
        ConcreteAdapterA();
        virtual ~ConcreteAdapterA();
        virtual void Request();

    private:
        Adaptee* m_pAdaptee;
    };

    class ConcreteAdapterB : public Adapter, Adaptee
    {
    public:
        ConcreteAdapterB();
        virtual ~ConcreteAdapterB();
        virtual void Request();
    };

    //////////////////////////////////////////////////////////////////////////
    void AdapterPattern_Test_Object();
    void AdapterPattern_Test_Class();
}

#endif

实现
#include "AdapterPattern.h"
#include <iostream>
using namespace std;

namespace AdapterPattern
{
    //////////////////////////////////////////////////////////////////////////
    Adaptee::Adaptee()
    {
    }
    Adaptee::~Adaptee()
    {
    }
    void Adaptee::SpecificRequest()
    {
        cout << "Adaptee::SpecificRequest()\n" ;
    }

    //////////////////////////////////////////////////////////////////////////
    Adapter::Adapter()
    {
    }
    Adapter::~Adapter()
    {
    }

    //////////////////////////////////////////////////////////////////////////
    ConcreteAdapterA::ConcreteAdapterA()
        : m_pAdaptee(new Adaptee)
    {
    }
    ConcreteAdapterA::~ConcreteAdapterA()
    {
        if (m_pAdaptee != NULL)
        {
            delete m_pAdaptee;
            m_pAdaptee = NULL;
        }
    }
    void ConcreteAdapterA::Request()
    {
        m_pAdaptee->SpecificRequest();
        cout << "ConcreteAdapterA::Request()\n" ;
    }

    //////////////////////////////////////////////////////////////////////////
    ConcreteAdapterB::ConcreteAdapterB()
    {
    }
    ConcreteAdapterB::~ConcreteAdapterB()
    {
    }
    void ConcreteAdapterB::Request()
    {
        Adaptee::SpecificRequest();
        cout << "ConcreteAdapterB::Request()\n" ;
    }

    //////////////////////////////////////////////////////////////////////////
    void AdapterPattern_Test_Object()
    {
        ConcreteAdapterA* pAdapter = new ConcreteAdapterA();

        pAdapter->Request();

        delete pAdapter;
        pAdapter = NULL;
    }

    void AdapterPattern_Test_Class()
    {
        ConcreteAdapterB* pAdapter = new ConcreteAdapterB();

        pAdapter->Request();

        delete pAdapter;
        pAdapter = NULL;
    }
}

客户端
#include "AdapterPattern.h"

#include <iostream>
using namespace AdapterPattern;

void main()
{
    AdapterPattern_Test_Object();
    AdapterPattern_Test_Class();
}

运行结果

分享到:
评论

相关推荐

    设计模式适配器模式PPT学习教案.pptx

    除了适配器模式,还有其他结构型模式,如桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。这些模式各自关注点不同,但都致力于提高代码的结构和可维护性。 桥接模式将抽象部分和实现部分解耦,使它们...

    设计模式_结构型_适配器模式.md

    适配器模式是软件设计中的一种常用模式,属于结构型模式。其核心目的是解决两个已有接口之间不兼容的问题,使它们能够协同工作。适配器模式可以看作是软件开发中的“桥梁”或“转换器”,在不修改原有接口的基础上,...

    java设计模式之适配器模式

    适配器模式是一种在软件工程中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式扮演着重要的角色,尤其在处理遗留代码或者第三方库集成时,能够有效地解决接口不匹配的问题。...

    Java 23种设计模式10适配器模式.pdf

    适配器模式是结构型模式的一种,其核心思想是将一个类的接口转换为客户期望的另一个接口。在软件开发中,经常会遇到现有类的接口不符合需求的情况,尽管该类的功能满足了客户类的需求。此时,适配器模式便扮演起...

    设计模式之结构型模式

    结构型模式不仅限于适配器模式和桥接模式,还包括代理模式、装饰模式、外观模式、组合模式和享元模式等。这些模式都致力于优化系统结构,提升代码的可复用性和可维护性。 4. **学习与实践**: 对于初学者来说,理解...

    JAVA设计模式(抽象类与适配器模式)

    适配器模式是一种结构型设计模式,它的主要作用是在不修改原有类的情况下,使两个接口不兼容的类能够协同工作。在Java中,适配器模式有两种形式:类适配器和对象适配器。类适配器模式通过继承目标接口和适配者类来...

    PHP5设计模式-适配器模式实现

    适配器模式是一种结构型设计模式,它的主要目的是使不兼容的接口能够协同工作。在实际开发中,我们可能会遇到这样的情况:一个类库或者服务提供了一个接口,而我们的代码需要使用另一个接口。适配器模式就充当了两者...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    设计模式分为三大类:创建型模式、结构型模式和行为型模式。 **创建型模式**关注的是对象的创建。共有五种创建型模式: 1. **工厂方法模式**:它定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法...

    [结构型模式] head first 设计模式之适配器模式(Adapter)

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在软件工程中,当系统中存在一个已经存在...通过案例分析和实际代码示例,书中的讲解会让你对适配器模式有深入的理解,并能熟练运用到实际开发中。

    设计模式适配器模式

    适配器模式是一种结构型设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式常用于解决旧代码与新代码之间的兼容性问题,或者是将第三方库的API转换为更适合我们项目需求的形式。适配器模式的核心...

    .Net设计模式_适配器模式

    适配器模式是一种在软件工程中广泛使用的结构型设计模式,它的主要目的是为了让不兼容的接口之间能够进行通信。在.NET开发中,适配器模式扮演着重要角色,尤其是在处理不同系统、库或组件间的集成时。这个".Net设计...

    Java设计模式之适配器模式

    适配器模式是一种结构型设计模式,它允许两个不兼容的接口能够协同工作。本文将深入探讨适配器模式的原理、分类以及在Java中的实现方式。 #### 适配器模式的基本原理 适配器模式的核心在于创建一个新的类(适配器...

    深入浅出设计模式之适配器模式与外观模式

    **定义**:适配器模式(Adapter Pattern)是一种结构型设计模式,允许不兼容的接口协同工作。该模式涉及到一个包含现有类的接口转换到客户端希望使用的另一个接口的对象。适配器模式使得原本由于接口不兼容而不能一起...

    设计模式之结构型模式uml类图EA文件.rar

    在给定的压缩包文件中,我们关注的是结构型设计模式,这些模式主要用于处理类和对象的组合与结构,以实现更灵活、可扩展的设计。下面我们将详细探讨其中涉及到的几个模式:桥接模式、适配器模式、装饰者模式和组合...

    设计模式之适配器模式与外观模式demo

    适配器模式和外观模式是两种非常重要的设计模式,它们在实际项目中有着广泛的应用。本资源提供了一个关于这两种模式的实战示例,帮助我们更好地理解和应用它们。 适配器模式(Adapter Pattern)的主要目的是将两个...

    Java设计模式之结构型模式源码以及文档

    结构型模式可以分为七种:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。这些模式在不同的场景下有着各自的用途,它们可以帮助我们构建出灵活、可扩展的系统。 适配器模式允许两个不...

Global site tag (gtag.js) - Google Analytics