設計模式 28 男人和女人 訪問者模式

2021-07-04 13:26:40 字數 3015 閱讀 5070

訪問者模式:表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。

適用:資料結構相對穩定的系統

資料結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由地啞奴啊/

目的:把處理從資料結構分離出來/iiao穩定的資料結構和變化的演算法,使用訪問者模式比較合適。因為訪問者模式使得演算法操作的增加變得更加容易。

優點:增加新的操作很容易,只需要增加乙個新的訪問者。訪問者模式將有關的行為集中到乙個訪問者物件中。

缺點:增加新的資料結構變得困難。

element:人類:

concreteelementa:男人

objectstructure:物件結構類

visitor:狀態類

main.cpp

#include #include #include "objectstructure.h"

#include "action.h"

#include "person.h"

using namespace std;

void process()

int main(int argc,char* argv)

person.h

#ifndef person_h

#define person_h

#include #include class action;

class person

;//男人

class man : public person

;//女人

class woman : public person

;#endif

person.cpp

#include "person.h"

#include "action.h"

person::person(const std::string& sname):_sname(sname)

person::~person(void)

void person::accept(std::shared_ptrptrvisitor)

man::man(const std::string& sname):person(sname)

man::~man()

void man::accept(std::shared_ptrptrvisitor)

woman::woman(const std::string& sname):person(sname)

woman::~woman()

void woman::accept(std::shared_ptrptrvisitor)

action.h

#ifndef action_h

#define action_h

#include "person.h"

//狀態

class action

;//成功

class sucess : public action

;//失敗

class failure : public action

;//戀愛

class amativeness : public action

;#endif

action.cpp

#include "action.h"

#include #include "person.h"

using namespace std;

action::action(void)

action::~action(void)

void action::getmanconclusion(man* ptrman)

void action::getwomanconclusion(woman* ptrwoman)

void sucess::getmanconclusion(man* ptrman)

void sucess::getwomanconclusion(woman* ptrwoman)

void failure::getmanconclusion(man* ptrman)

void failure::getwomanconclusion(woman* ptrwoman)

void amativeness::getmanconclusion(man* ptrman)

void amativeness::getwomanconclusion(woman* ptrwoman)

objectstructure.h

#ifndef objectstructure_h

#define objectstructure_h

#include #include using namespace std;

class person;

class action;

class objectstructure

;#endif

objectstructure.cpp

#include "objectstructure.h"

#include "person.h"

#include "action.h"

objectstructure::objectstructure()

objectstructure::~objectstructure(void)

void objectstructure::attach(std::shared_ptr& ptrperson)

void objectstructure::display(std::shared_ptrptrvisitor)

}

28 訪問者模式

表示乙個作用於某物件結構中的各元素的操作,它使你可以在不改變各元素的前提下定義作用於這些元素的新操作。適用於資料結構相對穩定,又有易於變化的演算法的系統 就是element穩定,visitor經常變化 由於把資料結構和資料結構上的操作進行了解耦,也就是把處理從資料結構中分離出來,使得增加新的操作很容...

大話設計模式學習筆記(28) 訪問者模式

原始碼git位址 請用物件導向的方式表明 男人成功的時候背後有個偉大的女人,女人成功的時候背後有個不成功的男人,男人失敗時悶頭喝酒 女人失敗時默默流淚。我們可以從題目中看出有兩個東西是我們可以抽象出來的 乙個人 分為男人,女人 另乙個是狀態 成功失敗 而人是不可擴充套件的,狀態可以無限擴充套件。其實...

第28章訪問者模式

一 概念 二 訪問者模式的優點和缺點 三 c 實現 visitor.h pragma once include include include using namespace std class action 類的前向宣告 人的抽象類 class person 狀態的抽象類 class action...