設(shè)計模式訪問者模式PPT課件_第1頁
設(shè)計模式訪問者模式PPT課件_第2頁
設(shè)計模式訪問者模式PPT課件_第3頁
設(shè)計模式訪問者模式PPT課件_第4頁
設(shè)計模式訪問者模式PPT課件_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、問題問題(Problem)(Problem) 學(xué)校有教師和工程師第1頁/共31頁問題問題(Problem)(Problem) abstract class Employee private string name; private double income; private int vacationDays; public string Name get return name; set name = value; public double Income get return income; set income = value; public int VacationDays get r

2、eturn vacationDays; set vacationDays = value; 第2頁/共31頁問題問題(Problem)(Problem) class Teacher : Employee public Teacher(string name, double income,int vacationDays) Name = name; Income = income; VacationDays = vacationDays; class Engineer : Employee public Engineer(string name, double income,int vacati

3、onDays) Name = name; Income = income; VacationDays = vacationDays; 第3頁/共31頁問題問題(Problem)(Problem) static void Main(string args) Teacher zhangsan = new Teacher(張三, 2500.0, 14); Engineer lisi = new Engineer(李四, 3500.0, 16); Console.WriteLine(zhangsan.Name + 的收入是+ zhangsan.Income + , 假期是+ zhangsan.Vaca

4、tionDays); Console.WriteLine(lisi.Name + 的收入是 + lisi.Income + , 假期是 + lisi.VacationDays); Console.ReadKey(); 如何批量給員工加薪,加假期?第4頁/共31頁主要內(nèi)容主要內(nèi)容模式動機(jī)與定義1模式結(jié)構(gòu)與分析2模式實例與解析3模式效果與應(yīng)用4第5頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) 模式動機(jī) 模式名稱:訪問者模式(Visitor) 對于系統(tǒng)中的某些對象,它們存儲在同一個集合中,且具有不同的類型,而且對于該集合中的對象,可以接受一類稱為訪問者的對象來訪問,而且不同的

5、訪問者其訪問方式有所不同,訪問者模式為解決這類問題而誕生。第6頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) 模式動機(jī) 在實際使用時,對同一集合對象的操作并不是唯一的,對相同的元素對象可能存在多種不同的操作方式。 而且這些操作方式并不穩(wěn)定,可能還需要增加新的操作,以滿足新的業(yè)務(wù)需求。 此時,訪問者模式就是一個值得考慮的解決方案。第7頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) 模式定義 訪問者模式(Visitor Pattern):表示一個作用于某對象結(jié)構(gòu)中的各元素的操作。它使我們可以在不改變各元素的類的前提下定義作用于這些元素的新操作。訪問者模式

6、是一種對象行為型模式。第8頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) 模式結(jié)構(gòu) 第9頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) 參與者 Vistor:抽象訪問者 ConcreteVisitor:具體訪問者 Element:抽象元素 ConcreteElement:具體元素 ObjectStructure:對象結(jié)構(gòu)第10頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor)第11頁/共31頁問題問題(Problem)(Problem) abstract class Employee private string name; pri

7、vate double income; private int vacationDays; public string Name get return name; set name = value; public double Income get return income; set income = value; public int VacationDays get return vacationDays; set vacationDays = value; abstract public void Accept(Visitor visitor); 第12頁/共31頁問題問題(Probl

8、em)(Problem) class Teacher : Employee public Teacher(string name, double income,int vacationDays) Name = name; Income = income; VacationDays = vacationDays; public override void Accept(Visitor visitor) visitor.Visit(this); class Engineer : Employee public Engineer(string name, double income,int vaca

9、tionDays) Name = name; Income = income; VacationDays = vacationDays; public override void Accept(Visitor visitor) visitor.Visit(this); 第13頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) abstract class Visitor abstract public void Visit(Employee element); class IncomeVisitor : Visitor public override void Visit(E

10、mployee element) element.Income *= 1.10; Console.WriteLine(element.Name + 的新工資是: + element.Income); class VacationVisitor : Visitor public override void Visit(Employee element) element.VacationDays += 3; Console.WriteLine(element.Name + 的新假期是 + element.VacationDays); 第14頁/共31頁訪問者模式訪問者模式(Visitor)(Vis

11、itor) class Employees private ArrayList employees = new ArrayList(); public void Attach(Employee employee) employees.Add(employee); public void Detach(Employee employee) employees.Remove(employee); public void Accept(Visitor visitor) foreach (Employee e in employees) e.Accept(visitor); 第15頁/共31頁訪問者模

12、式訪問者模式(Visitor)(Visitor) static void Main(string args) Teacher zhangsan = new Teacher(張三, 2500.0, 14); Engineer lisi = new Engineer(李四, 3500.0, 16); Employees e = new Employees(); e.Attach(zhangsan); e.Attach(lisi); IncomeVisitor v1 = new IncomeVisitor(); VacationVisitor v2 = new VacationVisitor();

13、e.Accept(v1); e.Accept(v2); Console.Read(); 第16頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) 模式結(jié)構(gòu) 第17頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) abstract class Element / Methods abstract public void Accept(Visitor visitor); 第18頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) class ConcreteElementA : Element / Methods override public

14、 void Accept(Visitor visitor) visitor.VisitConcreteElementA(this); public void OperationA() class ConcreteElementB : Element / Methods override public void Accept(Visitor visitor) visitor.VisitConcreteElementB(this); public void OperationB() 第19頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) class ObjectStructur

15、e / Fields private ArrayList elements = new ArrayList(); / Methods public void Attach(Element element) elements.Add(element); public void Detach(Element element) elements.Remove(element); public void Accept(Visitor visitor) foreach (Element e in elements) e.Accept(visitor); 第20頁/共31頁訪問者模式訪問者模式(Visit

16、or)(Visitor) abstract class Visitor / Methods abstract public void VisitConcreteElementA( ConcreteElementA concreteElementA); abstract public void VisitConcreteElementB( ConcreteElementB concreteElementB); 第21頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) class ConcreteVisitor1 : Visitor / Methods override publ

17、ic void VisitConcreteElementA( ConcreteElementA concreteElementA) Console.WriteLine(0 visited by 1, concreteElementA, this); override public void VisitConcreteElementB( ConcreteElementB concreteElementB) Console.WriteLine(0 visited by 1, concreteElementB, this); 第22頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor)

18、 class ConcreteVisitor2 : Visitor / Methods override public void VisitConcreteElementA( ConcreteElementA concreteElementA) Console.WriteLine(0 visited by 1, concreteElementA, this); override public void VisitConcreteElementB( ConcreteElementB concreteElementB) Console.WriteLine(0 visited by 1, concr

19、eteElementB, this); 第23頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) static void Main(string args) / Setup structure ObjectStructure o = new ObjectStructure(); o.Attach(new ConcreteElementA(); o.Attach(new ConcreteElementB(); / Create visitor objects ConcreteVisitor1 v1 = new ConcreteVisitor1(); ConcreteVisito

20、r2 v2 = new ConcreteVisitor2(); / Structure accepting visitors o.Accept(v1); o.Accept(v2); Console.ReadKey(); 第24頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) 訪問者模式的優(yōu)點如下 訪問者模式使得增加新的操作變得很容易。如果一些操作依賴于一個復(fù)雜的結(jié)構(gòu)對象的話,那么一般而言,增加新的操作會很復(fù)雜。而使用訪問者模式,增加新的操作就意味著增加一個新的訪問者類,因此將變得很容易。 訪問者模式將有關(guān)的行為集中到一個訪問者對象中,而不是分散到一個個的節(jié)點類中。 訪問者模式可以跨過幾個類的等級結(jié)構(gòu)訪問屬于不同的等級結(jié)構(gòu)的成員類。 第25頁/共31頁訪問者模式訪問者模式(Visitor)(Visitor) 訪問者模式的缺點如下 破壞封裝。訪問者模式要求訪問者對象訪問并調(diào)用每一個節(jié)點對象的操作,這隱含了一個對所有節(jié)點對象的要求:它們必須暴露一些自己的操作和內(nèi)部狀態(tài)。不然,訪問者的訪問就變得沒有意義。由于訪問者對象自己會積累訪問操作所需的狀態(tài),從而使這些狀態(tài)不再存儲在節(jié)點對象中,這也是破壞封裝的。 增加新的節(jié)點類變得很困難。每增加一個新的節(jié)點都意味

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論