1. 程式人生 > >23種設計模式之(六)代理模式(python_c++實現)

23種設計模式之(六)代理模式(python_c++實現)

23種設計模式之(六)代理模式(Proxy)

本文主要介紹23種設計模式之原型模式,附詳細python/c++示例程式碼。 - 概念 - 應用場景 - 注意事項 - 程式碼示例 - 總結 - 程式碼連結

代理模式(Proxy)

概念

代理模式是構造型的設計模式之一,它可以為其他物件提供一種代理以控制對這個物件的訪問,所謂代理,是指具有與代理元(被代理的物件)具有相同的介面的類,客戶端必須通過代理與被代理的目標類互動,而代理一般在互動的過程中(互動前後),進行某些特別的處理。

GoF對原型模式的定義是:為其他物件提供一個代理以控制對這個物件的訪問。

應用場景

隱藏類,為其提供代理類,對不同的呼叫者提供不同的呼叫許可權時,可以建立多個代理類來實現,也可以在一個代理類中進行許可權判斷來進行不同許可權的功能呼叫,擴充套件類的某個功能而不改變原類的程式碼也可以使用代理模式,在代理類中進行擴充套件。

程式碼示例

C++程式碼示例

/************************************************************************/
/* 設計模式專題
/*
/* 代理模式
/*
/* Author  : zzl
/*
/* 程式設計環境: window10 vs2010
/*
/* Date    : 20180915
/************************************************************************/
#include <iostream> class Subject { public: virtual void sellBook() = 0; }; class RealSubjectBook : public Subject { public: virtual void sellBook() { printf("sell book\n"); } }; //a中包含b類;a、b類實現協議類protocol class dangdangProxy : public Subject { public: dangdangProxy
() { m_subject = new RealSubjectBook; } virtual void sellBook() { discountSell(); m_subject->sellBook(); discountSell(); } void discountSell() { printf("sell book at a discount\n"); } private: Subject *m_subject; }; void main() { Subject *s = new dangdangProxy; s->sellBook(); delete s; }

python程式碼示例

# -*- coding: utf-8 -*-
###################################################################
# 設計模式專題
# 
# 代理模式
# 
# Author  : zzl
# 
# 程式設計環境: window10 python2.7
# 
# Date    : 20180915
##################################################################

class Subject(object):
    def sell_book(self):
        pass


class RealSubjectBook(Subject):
    def sell_book(self):
        print("sell book")


# a中包含b類;a、b類實現協議類protocol
class dangdangProxy(Subject):
    def __init__(self):
        self.m_subject = RealSubjectBook()

    def sell_book(self):
        self.discountSell()
        self.m_subject.sell_book()
        self.discountSell()

    def discountSell(self):
        print("sell book at a discount")


if __name__ == "__main__":
    subject = dangdangProxy()
    subject.sell_book()


原始碼連結