`
kmplayer
  • 浏览: 509932 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式之代理模式和状态模式

阅读更多
1,代理(Proxy)模式基本思想:代理类派生自一个基类,由平行地派生自同一个基类的一个或多个类提供实际的实现.
2,代理模式和状态模式的区别:代理模式只有一个实现类,而状态模式有多个.
3,代码
#include <iostream>
using namespace std;

class ProxyBase
{
public:
    virtual void f()=0;
    virtual void g()=0;
    virtual void h()=0;
    virtual ~ProxyBase(){}
};

class Implemention : public ProxyBase
{
public:
    void f(){ cout<<"Implemention.f()"<<endl; }
    void g(){ cout<<"Implemention.g()"<<endl; }
    void h(){ cout<<"Implemention.h()"<<endl; }
};

class Proxy : public ProxyBase
{
    //定义基类指针接收实现类
    ProxyBase* pB;
public:
    //构造实现类
    Proxy(){ pB=new Implemention; }
    ~Proxy(){ delete pB; }
    void f(){ pB->f(); }
    void g(){ pB->g(); }
    void h(){ pB->h(); }
};

int main()
{
    Proxy p;
    p.f();
    p.h();
    p.g();
    return 0;
}


4,
#include <iostream>
using namespace std;

class Creature
{
    bool isFrog;
public:
    Creature() : isFrog(true) {}
    void greet()
    {
        if(isFrog)
            cout<<"Frog"<<endl;
        else
            cout<<"Prince"<<endl;
    }
    void kiss(){ isFrog=false; }
};

int main()
{
    Creature cr;
    cr.greet();
    cr.kiss();
    cr.greet();
    return 0;
}

这段代码执行操作前,都必须检查bool变量isFrog.
改用代理模式编写.
#include <iostream>
using namespace std;
class State
{
public:
    virtual string response()=0;
};

class Frog : public State
{
    string response(){ return "Frog"; }
};

class Prince : public State
{
    string response(){ return "Prince"; }
};

class Creature
{
    //基类指针替代布尔变量
    State* pB;
public:
    Creature() : pB(new Frog) {}
    void greet()
    {
        cout<<pB->response()<<endl;
    }
    void kiss(){ pB=new Prince; }
};

int main()
{
    Creature cr;
    cr.greet();
    cr.kiss();
    cr.greet();
    return 0;
}


分享到:
评论

相关推荐

    23种设计模式之:建造者,代理,观察,策略,状态模式

    本文将重点介绍标题中提到的五种设计模式:建造者模式、代理模式、观察者模式、策略模式以及状态模式。 **1. 建造者模式(Builder)** 建造者模式是一种创建型设计模式,它允许我们分步骤构建复杂对象,而无需暴露...

    设计模式-代理模式

    总结来说,代理模式是iOS开发中不可或缺的设计模式,它帮助我们构建松耦合的系统,提供了扩展性和灵活性。通过定义和遵循协议,代理对象可以控制和增强对目标对象的访问,实现各种复杂功能,如数据传递、事件响应和...

    设计模式之美——教你写出高质量代码

    "设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    23种设计模式详解PDF

    设计模式 的分类 总体来说设计模式分为三大类: 创建型模式(5): ...策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    24种设计模式以及混合设计模式

    其中包括代理模式(Proxy)、装饰器模式(Decorator)、适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式帮助我们在不修改原有代码的情况...

    python设计模式第2版.pdf

    设计模式是构建大型软件系统zui强大的方法之一,优化软件架构和设计已经逐渐成为软件开发和维护过程中的一个重要课题。 Python设计模式(第2版)通过11章内容,全面揭示有关设计模式的内容,并结合Python语言进行示例...

    java 23种设计模式.zip

    设计模式主要分为三大类: 1.创建型模式:工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式。 2.结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 4.行为型模式:...

    新版设计模式手册 - C#设计模式(第二版)

    设计模式是解决软件开发中常见问题的经验总结,是软件工程的最佳实践之一。本手册将详细阐述23种经典设计模式,并结合C#语言特性,给出具体实现和应用示例。 首先,我们来了解一下设计模式的基本概念。设计模式是...

    设计模式课件大全

    设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略...

    java常用23中设计模式

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip

    【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种...

    设计模式-C++

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    23种面向对象设计模式

    文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...

    C#面向对象设计模式纵横谈 12种设计模式

    本篇将深入探讨12种核心的设计模式,它们是:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、桥接模式、组合模式、享元模式和观察者模式。 1. **单例模式**:确保一...

    设计模式那点事

    结构型模式则关注类和对象的组合与聚合,例如适配器模式(Adapter)用于将不同接口的对象进行协调,桥接模式(Bridge)将抽象部分与实现部分分离,代理模式(Proxy)提供对对象的控制,以及装饰模式(Decorator)...

Global site tag (gtag.js) - Google Analytics