(十二)Head first design patterns代理模式(c++)

这篇具有很好参考价值的文章主要介绍了(十二)Head first design patterns代理模式(c++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代理模式

代理模式:创建一个proxy对象,并为这个对象提供替身或者占位符以对这个对象进行控制。

典型例子:智能指针...

例子:比如说有一个talk接口,所有的people需要实现talk接口。但有些人有唱歌技能。不能在talk接口中实现sing功能,又不能在所有的people中实现sing功能。于是可以用代理模式去为people增加sing功能。具体的做法就是创建proxy类与people类继承同一个基类talk,将people的指针传入proxy以让proxy对象接管people对象。其实相当于proxy对象对people对象起到了装饰作用。代理模式的结构与装饰器结构类似,但目的与装饰器模式不同。装饰器模式的目的是装饰,代理模式的目的是提供一种代理来控制这个对象的访问。

(十二)Head first design patterns代理模式(c++),设计模式cpp,设计模式

Subject: 抽象主题角色,真实主题角色和代理角色都继承这个类,这样可以对真实主题角色和代理角色使用统一接口。

真实主题角色:描述了真实主题对象的细节。

代理角色:控制真实主题。

示例代码一

#include <iostream>

using namespace std;

class Italk{
public:
    virtual void talk(string msg){}
};
class People : public Italk{
public:
    People(string name, string age):name(name),age(age){}
    string getName(){}
    void   setName(){}
    string getAge(){}
    void   setAge(){}
    void   talk(string msg){ std::cout << "[" << msg << "]" << "hi~, My name is " << name << ", I'm " << age << "." << std::endl; }
private:
    string name;
    string age;
};
class TalkProxy : public Italk{
public:
    Italk* talker;
    TalkProxy(Italk* talker):talker(talker){}
    void talk(string msg){ talker->talk(msg); }
    void talk(string msg, string song){
        talker->talk(msg);
        sing(song);
    }
    void sing(string song){
        std::cout << "Now I'm bringing the song " << song << " for you." << std::endl;
    }
};

int main(){
    People* li = new People("li","18");
    li->talk("");
    TalkProxy* singer = new TalkProxy(li);
    singer->talk("proxy", "BEAT IT");
}

示例代码二

#include <iostream>

using namespace std;

class IDatabase{
public:
    virtual void executeQuery(string sql){}
};
class Database : public IDatabase{
public:
    void executeQuery(string sql){
        std::cout << " 执行SQL查询" << sql << std::endl;
    }
};
class DatabaseProxy : public IDatabase{
public:
    DatabaseProxy(){
        db = new Database;
    }
    void executeQuery(string sql){
        if(checkAccess()){
            std::cout << "权限检查:通过" << sql << std::endl;
            db->executeQuery(sql);
        } else {
            std::cout << "权限校验:未通过" << sql << std::endl;
        }
    }
    bool checkAccess(){
        return true;
    }
private:
    Database* db;
};

int main(){
    IDatabase* db = new DatabaseProxy();
    db->executeQuery("SELECT * FROM t1");
}

代理类有点像硬件中的核心计算单元与memory之间的cache,起到一个中间缓冲作用,避免了core直接访问memory。增加了灵活性和扩展性,有些memory不支持的功能,可以在cache增加。

 参考:

(C++实现)——代理模式(Proxy Pattern)_c++ 跨模块代理-CSDN博客

java代理模式_百度百科

代理模式(Proxy Pattern) - 知乎文章来源地址https://www.toymoban.com/news/detail-819439.html

到了这里,关于(十二)Head first design patterns代理模式(c++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【设计模式】Head First 设计模式——策略模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 将行为想象为一族算法,定义算法族,分别封装起来,让他们之间可以互相替换,使得算

    2024年02月11日
    浏览(41)
  • 【设计模式】Head First 设计模式——抽象工厂模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定他们具

    2024年02月10日
    浏览(43)
  • 【设计模式】Head First 设计模式——构建器模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 ​ 将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同

    2024年02月09日
    浏览(40)
  • 【设计模式】Head First 设计模式——装饰者模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

    2024年02月10日
    浏览(44)
  • 【设计模式】Head First 设计模式——工厂方法模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使得一个类的实

    2024年02月10日
    浏览(50)
  • 【设计模式】Head First 设计模式——观察者模式 C++实现

    设计模式最大的作用就是在变化和稳定中间寻找隔离点,然后分离它们,从而管理变化。将变化像小兔子一样关到笼子里,让它在笼子里随便跳,而不至于跳出来把你整个房间给污染掉。 主题对象(出版者)管理某些数据,当主题内的数据改变,就会通知观察者(订阅者)。

    2024年02月10日
    浏览(42)
  • 【Head First 设计模式】-- 观察者模式

    客户有一个WeatherData对象,负责追踪温度、湿度和气压等数据。现在客户给我们提了个需求,让我们利用WeatherData对象取得数据,并更新三个布告板:目前状况、气象统计和天气预报。 WeatherData对象提供了4个接口: getTemperature():获取温度 getHumidity():获取湿度 getPressure():获

    2024年02月05日
    浏览(46)
  • 【设计模式】Bridge Design pattern 桥接模式

    多个维度的变化引起的继承组合指数级增长 例子 一个物体有不同形状和不同颜色,如何用类来表示它们,这里包含了两个变化维度,一个是物体的形状,一个是颜色 继承的方式 如果使用继承的方式,此时要增加一个形状就要多两个类,或者增加一个颜色也要多两个类,这个

    2023年04月08日
    浏览(43)
  • 设计模式十二:享元模式(Flyweight Pattern)

    当我们需要创建大量相似对象时,享元模式可以帮助我们节省内存空间和提高性能。该模式通过共享相同的数据来减少对象的数量。 在享元模式中,有两种类型的对象:享元(Flyweight)和非享元(Unshared Flyweight)。享元对象是可共享的,它包含内部状态和外部状态。内部状态

    2024年02月14日
    浏览(47)
  • 设计模式二十二:策略模式(Strategy Pattern)

    定义一系列算法,将每个算法封装成独立的对象,并使这些对象可互相替换。这使得在运行时可以动态地选择算法,而不必改变使用算法的客户端代码。策略模式的主要目标是将算法的定义与使用分离,使得客户端可以根据需要灵活地选择和切换不同的算法,而不影响到客户

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包