`

[结构型模式] 代理模式的理解

 
阅读更多


头文件
//ProxyPattern.h

#ifndef PROXY_PATTERN_H
#define PROXY_PATTERN_H

#include <Windows.h>
#include <iostream>
using namespace std;

namespace ProxyPattern
{
#define SAFE_DELETE(p) if (p) { delete p; p = NULL;}

    //////////////////////////////////////////////////////////////////////////
    class CSubject
    {
    public:
        CSubject();
        virtual ~CSubject();

        virtual void Request() = 0;
    };

    //////////////////////////////////////////////////////////////////////////
    class CRealSubject : public CSubject
    {
    public:
        CRealSubject();
        virtual ~CRealSubject();

        virtual void Request();
    };

    //////////////////////////////////////////////////////////////////////////
    class CProxy : public CSubject
    {
    public:
        CProxy();
        virtual ~CProxy();

        virtual void Request();

    private:
        CRealSubject* m_pRealSubject;
    };

    //////////////////////////////////////////////////////////////////////////
    void ProxyPattern_Test();
}

#endif

实现
#include "ProxyPattern.h"

namespace ProxyPattern
{
    //////////////////////////////////////////////////////////////////////////
    CSubject::CSubject()
    {}

    CSubject::~CSubject()
    {}

    void CSubject::Request()
    {}

    //////////////////////////////////////////////////////////////////////////
    CRealSubject::CRealSubject(){}
    CRealSubject::~CRealSubject(){}

    void CRealSubject::Request()
    {
        cout<<"CRealSubject Request"<<endl;
    }

    //////////////////////////////////////////////////////////////////////////
    CProxy::CProxy()
        : m_pRealSubject(NULL)
    {}

    CProxy::~CProxy()
    {
        SAFE_DELETE(m_pRealSubject);
    }

    void CProxy::Request()
    {
        if (NULL == m_pRealSubject)
        {
            m_pRealSubject = new CRealSubject();
        }
        cout<<"CProxy Request"<<endl;
        m_pRealSubject->Request();
    }

    ///////////////////////////////////////////////////////////////////////////
    void ProxyPattern_Test()
    {
        CSubject *pSubject = new CProxy();
        pSubject->Request();
        SAFE_DELETE(pSubject);
    }
}

客户端
#include "ProxyPattern.h"


#include <iostream>
using namespace std;
using namespace ProxyPattern;

void main()
{
    ProxyPattern_Test();
}

运行结果
分享到:
评论

相关推荐

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

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

    设计模式之结构型模式

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

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

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

    [结构型模式] 装饰者模式的理解

    装饰者模式是设计模式中的一种结构型模式,它在不改变原有对象的基础上,动态地给对象添加新的行为或属性,以此来扩展对象的功能。这种模式遵循开闭原则,即对扩展开放,对修改关闭,是一种非常实用的设计策略。 ...

    23种设计模式-结构型模式.docx

    本文将深入探讨其中的两种结构型模式:适配器模式和代理模式。 1. 适配器模式 适配器模式是一种将两个不兼容的接口进行转换的模式,使得原本无法协同工作的类能够一起工作。它主要分为类适配器模式和对象适配器...

    行为型模式+结构型模式+创建型模式:三大设计模式实例剖析与深入解读

    虽然描述中没有具体提及结构型模式的实例,但常见的结构型模式有代理模式、装饰器模式、桥接模式等,它们都在不同的场景下帮助我们构建更灵活、可扩展的系统。 **创建型模式**主要处理对象的创建。这些模式提供了一...

    结构型模式部分知识

    在软件设计领域,结构型模式是面向对象设计中的一种重要思想,它主要关注如何组织类和对象,以形成更复杂的结构,同时保持代码的清晰性和可维护性。本资料是关于高等软件工程中的7大结构型模式的PPT总结,包含了大量...

    C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式) (Level 300)

    本文将深入探讨C#中的一个关键设计模式——代理模式,它属于结构型模式的一种,适用于管理和控制对象的访问。我们将从概念、分类、实现方式以及实际应用等方面进行详细的讲解。 1. **代理模式概念**: 代理模式是一...

    C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式)

    ### C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式) #### 重要概念:代理模式 代理模式是一种常用的结构型设计模式,它通过为另一个对象提供一个代理,来控制对该对象的访问。这种模式在软件工程中...

    设计模式原理与应用之结构型模式.pptx

    结构型模式是设计模式的一种分类,它关注如何组合类和对象,构建更大的结构。本篇主要讨论了七种结构型模式:Adapter、Bridge、Composite、Decorator、Façade、Flyweight和Proxy。 1. **Adapter模式**: - 适配器...

    结构型模型实验报告+源代码.rar

    其次,代理模式(Proxy Pattern)为一个对象提供一个替身,以控制对这个对象的访问。代理对象通常用于延迟加载、安全控制或者增加额外功能,如日志记录。在C#中,动态代理可以使用System.Reflection.Emit库来实现。 ...

    C#面向对象设计模式纵横谈-结构型模式(合集)

    这些结构型模式是C#面向对象设计中的重要工具,理解和掌握它们能帮助开发者编写出更加优雅、可扩展的代码。李建忠讲师的课程将深入探讨这些模式的原理、应用场景以及如何在C#中有效实施,对于提升开发者的编程技艺...

    设计模式2-结构型模式.doc

    在本文中,我们将探讨几种结构型设计模式,包括适配器模式、桥接模式、外观模式、享元模式、代理模式和装饰器模式。 1. **适配器模式**: - 适配器模式用于连接两个不兼容的接口,使得原本不能一起工作的类可以...

    新版设计模式手册 通俗的例子讲述设计的方法 1创建型模式 2结构型模式 3 行为模式 详细的设计说明

    这个“新版设计模式手册”深入浅出地介绍了设计模式的三大类:创建型模式、结构型模式和行为模式,为开发者提供了一套详细的设计说明。 一、创建型模式 创建型模式主要关注对象的创建过程,它们的目标是使得对象的...

    实验2:结构建型模式应用实验(1)

    2. **理解每种“结构型模式”的结构、实现和应用场景**:每种模式都有其特定的应用场景,了解它们如何工作以及何时使用对于解决实际问题至关重要。 3. **学会应用7种“创建型模式”进行软件开发**:虽然题目中提到...

Global site tag (gtag.js) - Google Analytics