国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++ 設(shè)計模式之代理模式

這篇具有很好參考價值的文章主要介紹了C++ 設(shè)計模式之代理模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【提示:如果不想看文字介紹,可以直接跳轉(zhuǎn)到C++編碼部分】

【簡介】什么是代理模式

????????代理模式?Proxy Pattern?是?種結(jié)構(gòu)型設(shè)計模式,?于控制對其他對象的訪問。在代理模式中,允許?個對象(代理)充當(dāng)另?個對象(真實對象)的接?,以控制對這個對象的訪問。通常?于在訪問某個對象時引??些間接層(中介的作?),這樣可以在訪問對象時添加額外的控制邏輯,?如限制訪問權(quán)限,延遲加載。
?????????如說有?個?件加載的場景,為了避免直接訪問“?件”對象,我們可以新增?個代理對象,代理對象中有?個對“?件對象”的引?,在代理對象的 load ?法中,可以在訪問真實的?件對象之前進??些操作,?如權(quán)限檢查,然后調(diào)?真實?件對象的 load ?法,最后在訪問真實對象后進?其他操作,?如記錄訪問?志。


【基本結(jié)構(gòu)】

代理模式的主要??有:

  • Subject(抽象主題): 抽象類,通過接?或抽象類聲明真實主題和代理對象實現(xiàn)的業(yè)務(wù)?法。
  • RealSubject(真實主題):定義了Proxy所代表的真實對象,是客戶端最終要訪問的對象。
  • Proxy(代理):包含?個引?,該引?可以是RealSubject的實例,控制對RealSubject的訪問,并可能負(fù)責(zé)創(chuàng)建和刪除RealSubject的實例。

C++ 設(shè)計模式之代理模式,c++,設(shè)計模式,代理模式


【實現(xiàn)方式】

????????代理模式的基本實現(xiàn)分為以下?個步驟:(以Java代碼做示例)

1. 定義抽象主題, ?般是接?或者抽象類,聲明真實主題和代理對象實現(xiàn)的業(yè)務(wù)?法。

// 1. 定義抽象主題
interface Subject {
    void request();
}

2.定義真實主題,實現(xiàn)抽象主題中的具體業(yè)務(wù)
?

// 2. 定義真實主題
class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.println("RealSubject handles the request.");
    }
}

3.定義代理類,包含對RealSubject 的引?,并提供和真實主題相同的接?,這樣代理就可以替代真實主題,并對真實主題進?功能擴展。

// 3. 定義代理
class Proxy implements Subject {
    // 包含?個引?
    private RealSubject realSubject;

    @Override
    public void request() {
    // 在訪問真實主題之前可以添加額外的邏輯
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
    // 調(diào)?真實主題的?法
        realSubject.request();

    // 在訪問真實主題之后可以添加額外的邏輯
    }
}

4.客戶端使?代理

// 4. 客戶端使?代理
public class Main {
    public static void main(String[] args) {
        // 使?代理
        Subject proxy = new Proxy();
        proxy.request();
    }
}

【使用場景】

????????代理模式可以控制客戶端對真實對象的訪問,從?限制某些客戶端的訪問權(quán)限,此外代理模式還常?在訪問真實對象之前或之后執(zhí)??些額外的操作(?如記錄?志),對功能進?擴展。
????????以上特性決定了代理模式在以下?個場景中有著?泛的應(yīng)?:

  • 虛擬代理:當(dāng)?個對象的創(chuàng)建和初始化?較昂貴時,可以使?虛擬代理,虛擬代理可以延遲對象的實際創(chuàng)建和初始化,只有在需要時才真正創(chuàng)建并初始化對象。
  • 安全代理:安全代理可以根據(jù)訪問者的權(quán)限決定是否允許訪問真實對象的?法。

????????但是代理模式涉及到多個對象之間的交互,引?代理模式會增加系統(tǒng)的復(fù)雜性,在需要頻繁訪問真實對象時,還可能會有?些性能問題。
????????代理模式在許多?具和庫中也有應(yīng)?:

  • Spring 框架的 AOP 模塊使?了代理模式來實現(xiàn)切?編程。通過代理,Spring 能夠在?標(biāo)對象的?法執(zhí)?前、執(zhí)?后或拋出異常時插?切?邏輯,?不需要修改原始代碼。
  • Java 提供了動態(tài)代理機制,允許在運?時?成代理類。
  • Android中的Glide框架使?了代理模式來實現(xiàn)圖?的延遲加載。

【擴展】代理模式和適配器模式有什么區(qū)別

????????代理模式的主要?的是控制對對象的訪問。通常?于在訪問真實對象時引??些額外的控制邏輯,如權(quán)限控制、延遲加載等。
????????適配器模式的主要?的是使接?不兼容的對象能夠協(xié)同?作。適配器模式允許將?個類的接?轉(zhuǎn)換成另?個類的接?,使得不同接?的類可以協(xié)同?作。


【C++ 編碼部分】

1. 題目描述

????????小明想要購買一套房子,他決定尋求一家房屋中介來幫助他找到一個面積超過100平方米的房子,只有符合條件的房子才會被傳遞給小明查看。

2. 輸入描述

????????第一行是一個整數(shù) N(1 ≤ N ≤ 100),表示可供查看的房子的數(shù)量。接下來的 N 行,每行包含一個整數(shù),表示對應(yīng)房子的房屋面積。

3. 輸出描述

????????對于每個房子,輸出一行,表示是否符合購房條件。如果房屋面積超過100平方米,輸出 "YES";否則輸出 "NO"。

4. C++編碼實例


/**
* @version Copyright (c) 2024 NCDC, Servo。 Unpublished - All rights reserved
* @file ProxyMode.hpp
* @brief 代理模式
* @autor 寫代碼的小恐龍er
* @date 2024/01/10
*/

#include<iostream>
#include<string>

using namespace std;

// 抽象主題 -- 買房子的人 和 其代理類的 基類 實現(xiàn)業(yè)務(wù)方法
class AbstractHome
{
public:
    virtual void BuyInfo() = 0; 
};

// 真實主題 -- 買房子的類
class HomeBuyer : public AbstractHome
{
public:
    void BuyInfo() override{
        std::cout << "YES" << endl;
    }
};

// 【!代理類】 真實類的行為全權(quán)由代理類代替
class HomeProxy : public AbstractHome
{
 // 包含真實類的實例化對象
private:
    HomeBuyer *_homeBuyer = nullptr;

// 在創(chuàng)建代理類時 一并創(chuàng)建真實類
public:
    HomeProxy(){
        if(_homeBuyer == nullptr) {
            _homeBuyer = new HomeBuyer();
        }
    }
// 將真實類的各個需求屬性放置在代理類種
private:
    int _areaSize = 0;
// 重寫真實類的各個行為
public:
    // 一種方法是可以將 判斷屬性加至代理者的私有屬性種 另一種是將其作為參數(shù)傳入進去
    void SetAreaSize(int size){
        this->_areaSize = size;
    }
    void BuyInfo() override{
        if(_areaSize > 100) _homeBuyer->BuyInfo();
        else std::cout << "NO" << endl;
    }
};

// 客戶端代碼
int main()
{
    // 輸入的房子數(shù)量
    int homeNum = 0;
    std::cin >> homeNum;
    
    // 創(chuàng)建代理類
    AbstractHome *buyerAbstractProxy = new HomeProxy();
    
    // 設(shè)置代理類 將抽象類向下類型轉(zhuǎn)換
    HomeProxy *homeProxy = dynamic_cast<HomeProxy *>(buyerAbstractProxy);
        
    for(int i = 0; i < homeNum; i++)
    {
        // 房子的面積大小 -- 需要告知給代理 讓其做邏輯判斷
        int areaSize = 0;
        std::cin >> areaSize;
        
        homeProxy->SetAreaSize(areaSize);
        
        // 開始進行邏輯判斷
        homeProxy->BuyInfo();
    }
    
    delete buyerAbstractProxy;
    buyerAbstractProxy = nullptr;
    
    return 0;
}

......

To be continued.文章來源地址http://www.zghlxwxcb.cn/news/detail-794435.html

到了這里,關(guān)于C++ 設(shè)計模式之代理模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 設(shè)計模式之代理模式(靜態(tài)代理&動態(tài)代理)

    設(shè)計模式之代理模式(靜態(tài)代理&動態(tài)代理)

    目錄 1、什么是代理模式 2、代理模式的結(jié)構(gòu) 3、代理模式的實現(xiàn) 3.1 靜態(tài)代理和動態(tài)代理概念 3.2?靜態(tài)代理 3.3 動態(tài)搭理 3.3.1 代碼實現(xiàn) 3.3.2 Proxy類講解 4、動態(tài)代理VS靜態(tài)代理 5、代理模式優(yōu)缺點 由于某些原因需要給某對象提供一個代理以控制對該對象的訪問。這時,訪問對象

    2024年02月03日
    瀏覽(26)
  • 設(shè)計模式8:代理模式-動態(tài)代理

    上一篇:設(shè)計模式8:代理模式-靜態(tài)代理 “動態(tài)”的含義是 代碼生成代理類,一個代理類可以代理多個接口 。 動態(tài)區(qū)別于 死板 ,靜態(tài)代理中一個代理類只能代理一個接口,其他不同的接口,就需要再手寫不同的代理類,這就很 死板 。 動態(tài)代理類似于在安卓里面,我們常

    2024年02月09日
    瀏覽(31)
  • 設(shè)計模式8:代理模式-靜態(tài)代理

    我嘗試在JDK、Android SDK和一些出名的庫中,尋找靜態(tài)代理的源碼,沒能找到。如果有讀者發(fā)現(xiàn),歡迎評論或者私信我。 1. 售票代理 售票服務(wù) 站點售票 代理網(wǎng)點售票 2. 明星代理

    2024年02月11日
    瀏覽(24)
  • Java設(shè)計模式 (三) 代理設(shè)計模式

    什么是代理設(shè)計模式? 代理設(shè)計模式是一種結(jié)構(gòu)型設(shè)計模式,它允許創(chuàng)建一個代理對象,用于控制對其他對象的訪問。代理模式通常用于在訪問對象時添加一些附加操作,而不是直接訪問真實對象。代理模式可以在不改變原始類代碼的情況下,通過引入代理類來增強功能。 代

    2024年02月12日
    瀏覽(26)
  • 設(shè)計模式 -- 代理模式

    設(shè)計模式 -- 代理模式

    月是一輪明鏡,晶瑩剔透,代表著一張白紙(啥也不懂) 央是一片海洋,海乃百川,代表著一塊海綿(吸納萬物) 澤是一柄利劍,千錘百煉,代表著千百錘煉(輸入輸出) 月央澤,學(xué)習(xí)的一種過程,從白紙-吸收各種知識-不斷輸入輸出變成自己的內(nèi)容 希望大家一起堅持這個過程,也同樣希望大家

    2023年04月08日
    瀏覽(20)
  • 設(shè)計模式詳解-代理模式

    類型:結(jié)構(gòu)型模式 實現(xiàn)原理:創(chuàng)建具有現(xiàn)有對象的對象 作用:為其他對象提供一種代理以控制對這個對象的訪問。 解決的問題:由于對象的訪問條件不一,直接訪問對象會造成麻煩問題 解決問題的方法:增加中間層。 何時使用:想在訪問一個類時做一些控制。 實現(xiàn)核心:

    2024年02月12日
    瀏覽(22)
  • 【設(shè)計模式】代理模式

    【設(shè)計模式】代理模式

    5.1.1 概述 由于某些原因需要給某對象提供一個代理以控制對該對象的訪問。這時,訪問對象不適合或者不能直接引用目標(biāo)對象,代理對象作為訪問對象和目標(biāo)對象之間的中介。 Java中的代理按照代理類生成時機不同又分為靜態(tài)代理和動態(tài)代理。靜態(tài)代理代理類在編譯期就生成

    2024年02月15日
    瀏覽(31)
  • 設(shè)計模式-代理模式

    ● 為對象提供一個代理類,增強該對象的方法,控制對這個對象的訪問 ● 靜態(tài)代理和動態(tài)代理:靜態(tài)代理就是編譯的時候就已經(jīng)確定,而動態(tài)代理就是運行時才會生成 緩存代理 ● 提供數(shù)據(jù)的緩存功能,避免數(shù)據(jù)庫重復(fù)查詢 實踐 定義數(shù)據(jù)查詢的接口 接口實現(xiàn)類實現(xiàn)接口

    2024年02月11日
    瀏覽(23)
  • 設(shè)計模式——代理模式

    代理模式(Proxy Pattern)是一種結(jié)構(gòu)型設(shè)計模式,它為其他對象提供一個代理以控制對這個對象的訪問。代理對象在客戶端和目標(biāo)對象之間起到中介作用,可以添加額外的功能或限制對目標(biāo)對象的直接訪問。 抽象主題(Subject Interface): 定義了目標(biāo)對象和代理對象共有的接口。

    2024年01月17日
    瀏覽(21)
  • 設(shè)計模式之代理模式

    當(dāng)我們有對象因為安全性,不能直接對外暴露,或者是需要對對象的操作本身記錄日志等信息時就可以考慮使用代理模式, 享元設(shè)計模式,包含如下元素: UML圖如下: 另外,代理又分為靜態(tài)代理和動態(tài)代理,靜態(tài)代理就是在編譯器已經(jīng)確定的代理方式,即是硬編碼到程序中

    2024年02月16日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包