設計模式讀書筆記 Visitor(訪問者)

2021-07-03 17:59:09 字數 2533 閱讀 5418

意圖:

表示乙個作用於某對像結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。

結構圖:截圖於原著

實現:visitor

namespace ns_visitor 

virtual ~visitor() {}

virtual void visitconcreteelementa(concreteelementa *cea) = 0;

virtual void visitconcreteelementb(concreteelementb *ceb) = 0;

};} /* namespace ns_visitor */

concretevisitor1

#include "visitor.h"

#include "concreteelementa.h"

#include "concreteelementb.h"

namespace ns_visitor

virtual ~concretevisitor1() {}

virtual void visitconcreteelementa(concreteelementa *cea)

virtual void visitconcreteelementb(concreteelementb *ceb)

int gettotal(void)

private:

int _total;

};} /* namespace ns_visitor */

concretevisitor2

#include "visitor.h"

#include "concreteelementa.h"

#include "concreteelementb.h"

namespace ns_visitor

virtual ~concretevisitor2() {}

virtual void visitconcreteelementa(concreteelementa *cea)

virtual void visitconcreteelementb(concreteelementb *ceb)

int gettotal(void)

private:

int _total;

};} /* namespace ns_visitor */

element

namespace ns_visitor ;

element(int type, int price) : _type(type), _price(price) {}

virtual ~element() {}

virtual void accept(visitor *visitor) = 0;

int gettype(void)

int getprice(void)

private:

int _type;

int _price;

};} /* namespace ns_visitor */

concreteelementa

#include "visitor.h"

#include "element.h"

namespace ns_visitor

virtual ~concreteelementa() {}

virtual void accept(visitor *visitor) };

} /* namespace ns_visitor */

concreteelementb

#include "visitor.h"

#include "element.h"

namespace ns_visitor

virtual ~concreteelementb() {}

virtual void accept(visitor *visitor) };

} /* namespace ns_visitor */

main

#include #include #include "visitor/concretevisitor1.h"

#include "visitor/concretevisitor2.h"

#include "visitor/concreteelementa.h"

#include "visitor/concreteelementb.h"

using namespace ns_visitor;

using namespace std;

int main(void)

附加:

設計模式讀書筆記

設計模式 就乙個類而言,應該僅有乙個引起它變化的原因。如果乙個類承擔的職責過多,就等於把這些職責耦合在一起,乙個職責的變化可能會削弱或者抑制這個類完成其他職責的能力。這種耦合會導致脆弱的設計,當變化發生時,設計會遭受意想不到的破壞。對於擴充套件是開放的,對於更改是封閉的。無論模組是多麼的 封閉 都會...

設計模式讀書筆記 外觀模式

講的是如何將乙個介面轉換成客戶所需要的另乙個接 口,它的目的在於 解決介面的不相容性問題。現在這裡有這樣乙個模式,它的目的在於如何簡化介面,它可以將多個 類的複雜的一切隱藏在背後,只顯露 出乙個乾淨美觀的外觀。晚上睡覺之前,你總是喜歡看電視,在你進入臥室的時候你需要完成以下幾個步驟 開啟電燈 開啟空...

設計模式讀書筆記 6

decorator 模式 名稱 裝飾模式,包裝模式 問題 需要擴充套件乙個類的功能,或者給以各類增加附加職責 需要動態給乙個物件增加功能,這些功能可能動態撤銷 需要增加基本功能的排列組合產生非常大量的功能,從而使得繼承關係變得不現實。例如 乙個圖形介面工具箱允許你對一些使用者介面元素增加一些特性 例...