1. 程式人生 > >C++設計模式——委託模式

C++設計模式——委託模式

委託模式是軟體設計模式中的一項基本技巧。在委託模式中,有兩個物件參與處理同一個請求,接受請求的物件將請求委託給另一個物件來處理。委託模式是一項基本技巧,許多其他的模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採用了委託模式。委託模式使得我們可以用聚合來替代繼承,它還使我們可以模擬mixin。

//*****************************************************************************
//*** 委託模式(示例1) ***
//*********************************************
******************************** #include <iostream> using namespace std; class RealPrinter { public: void print() { std::cout << "real-printer" << std::endl; } }; class Printer { public: Printer() : p(RealPrinter()) {} void print() { p.print(); } private: RealPrinter p;
}; int main() { Printer* printer = new Printer(); printer->print(); }
//*****************************************************************************
//*** 委託模式(示例2) ***
//*****************************************************************************

#include <iostream>
using namespace
std; class I //interface { public: virtual void f() = 0; virtual void g() = 0; }; class A : public I { public: void f(){std::cout << "A::f()" << std::endl;} void g(){std::cout << "A::g()" << std::endl;} }; class B : public I { public: void f(){std::cout << "B::f()" << std::endl;} void g(){std::cout << "B::g()" << std::endl;} }; class C : public I { public: C() { m_i = new A();/*delegation*/ } void f(){ m_i->f(); } void g(){ m_i->g(); } // normal attributes void toA(){ m_i = new A(); } void toB(){ m_i = new B(); } private: I* m_i; } int main() { C cc = C(); cc.f(); // output: A::f() cc.g(); // output: A::g() cc.toB(); cc.f(); // output: B::f() cc.g(); // output: B::g() }

相關推薦

C++設計模式——委託模式

委託模式是軟體設計模式中的一項基本技巧。在委託模式中,有兩個物件參與處理同一個請求,接受請求的物件將請求委託給另一個物件來處理。委託模式是一項基本技巧,許多其他的模式,如狀態模式、策略模式、訪

設計模式——委託模式

委託模式同樣是設計模式的一種。 委託模式:兩個物件之間,不能直接聯絡,需要通過一個第三方的物件,幫助它們聯絡,叫委託模式。 借用買賣二手房的例子: 在使用委託模式時,我們需要使用協議。協議就是一套標準,在標準裡面聲明瞭很多方法,但卻不管方法是怎麼實現的

C#基礎系列——委託實現簡單設計模式

前言:上一篇介紹了下多執行緒的相關知識:C#基礎系列——多執行緒的常見用法詳解,裡面就提到了委託變數。這篇簡單介紹下委託的使用。當然啦,園子裡面很多介紹委託的文章都會說道:委託和事件的概念就像一道坎,過了這個檻的人,覺得真是太容易了,而沒有過去的人每次見到委託和事件就覺得心裡發慌。確實這東西就像最開始學C語言

C#基礎系列——委託設計模式(二)

前言:前篇 C#基礎系列——委託實現簡單設計模式 簡單介紹了下委託的定義及簡單用法。這篇打算從設計模式的角度去解析下委託的使用。我們知道使用委託可以實現物件行為(方法)的動態繫結,從而提高設計的靈活性。上次說過,方法可以理解為委託的例項,站在方法的層面,委託例項的一個非常有用的特性是它既不知道,也不關心其封裝

C#中的委託和事件(提及Observer設計模式)(轉載)

原連結:http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx 引言 委託 和 事件在 .Net Framework中的應用非常廣泛,然而,較好地理解委託和事件對很多接

設計模式C++實現——工廠方法模式

對象 類型 begin 創建對象 dia rate rod rtu log 模式定義: 工廠方法模式定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。 模式結構: Creator是一個類,它

C++設計模式之狀態模式(二)

virtual alt 虛構函數 需求 rate names clas term delete 2、智能空調的設計與實現 某軟件公司將開發一套智能空調系統: 系統檢測到溫度處於20---30度之間,則切換到常溫狀態;溫度處於30---45度,則切換到制冷狀態;

設計模式——命令模式C++實現)

clear cto ive pre urn bak std oot style 1 [root@ ~/learn_code/design_pattern/19_order]$ cat order.cpp 2 #include <

C#設計模式--觀察者模式(發布-訂閱模式

工廠方法 設計 解決 line strac itl names spa ret 0.C#設計模式--簡單工廠模式 1.C#設計模式--工廠方法模式 2.C#設計模式--抽象工廠模式 3.C#設計模式--單例模式 4.C#設計模式--建造者模式 5.C#設計模式--

Note8:C#設計模式—工廠方法模式(VS 簡單工廠模式 & 抽象工廠模式

工廠方法模式 blog 抽象工廠 nbsp strong str cnblogs note 設計 一、資源說明 (1)本文有參考:http://www.cnblogs.com/zhili/p/FactoryMethod.html 待更!Note8:C#設計模式—工廠方法

C#設計模式總結

替代 version 論文 詞典 log 調用接口 常用 私有構造函數 額外 原文地址:http://www.cnblogs.com/zhili/p/SingletonPatterm.html 一、引言   經過這段時間對設計模式的學習,自己的感觸還是很多的,因為我現在在

c++ 設計模式6 (Decorator 裝飾模式

ces 軟件組件 類繼承 通過 write height cte 中間 類型 4. “單一職責”類模式 在軟件組件的設計中,如果責任劃分的不清晰,使用繼承得到的結果往往是隨著需求的變化,子類急劇膨脹,同時充斥著重復代碼,這時候的關鍵是劃清責任。 典型模式代表: Decora

c++ 設計模式7 (Bridge 橋模式

設計模式 play 復制代碼 復用性 ict 只有一個 mage 單一職責原則 sea 4.2 Bridge 橋模式 動機: 由於某些類型的固有的實現邏輯,使得它們具有兩個變化的維度,乃至多個變化的維度。 代碼示例: 實現一個Messager,含有基本功能PlaySo

c++ 設計模式9 (Abstract Factory 抽象工廠模式

構建 數據庫 strac 無需 div exec oracl dfa tle 5.2 抽象工廠模式 動機:在軟件系統中,經常面臨著“一系列相互依賴的對象”的創建工作;同時,由於需求的變化,往往存在更多系列對象的創建工作。 代碼示例: 實現利用數據庫的業務邏輯,支持多數據

c++ 設計模式8 (Factory Method 工廠方法)

更改 itl logs 客戶 eos image 分享 一個 工廠方法模式 5. “對象創建”類模式 通過“對象創建”類模式繞開new,來避免對象創建(new)過程中所導致的緊耦合(依賴具體類),從而支持對象創建的穩定。它是接口抽象之後的第一步工作。 5.1 工廠方法 動機

c++ 設計模式之簡單的工廠模式

urn ret 應用程序 on() name clu get actor new 調試環境:vs2010 // test0.cpp : 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include <iostream>

C#設計模式——簡單工廠模式

turn static 現在 rri 介紹 return 天都 土豆 增加 一、引言   這個系列也是自己對設計模式的一些學習筆記,希望對一些初學設計模式的人有所幫助的,在上一個專題中介紹了單例模式,在這個專題中繼續為大家介紹一個比較容易理解的模式——簡單工廠模式。 二、簡

C#設計模式——工廠方法模式

osc tor cas 模式 main csharp plan ofa mar 一、引言   在簡單工廠中講到簡單工廠模式的缺點,有一點是——簡單工廠模式系統難以擴展,一旦添加新產品就不得不修改簡單工廠方法,這樣就會造成簡單工廠的實現邏輯過於復雜,然而本專題介紹的工廠方法模

C#設計模式之工廠方法模式

實例 names 添加 創建 日誌 ring lin 數據庫日誌 連接數據庫 using System; using System.Collections.Generic; using System.Linq; using System.Text; //工廠

C# 設計模式之空對象模式

set *** 實的 中間 man blog mar 對象 同時 最近看了不少的書籍和視頻等相關資料,決定自己邊學習邊寫一下個人對設計模式的理解,如果有不對的請大家多多指正。 今天先說說我個人覺得最簡單的設計模式 -- [空對象模式] 空對象模式可以減少客戶端對對象判