24.设计模式.访问者模式ppt课件_第1页
24.设计模式.访问者模式ppt课件_第2页
24.设计模式.访问者模式ppt课件_第3页
24.设计模式.访问者模式ppt课件_第4页
24.设计模式.访问者模式ppt课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LOGO设计模式设计模式(Design Pattern) 张凯 副教授计算机学院 软件工程系:武汉科技大学问题问题(Problem)(Problem)v学校有教师和工程师教师 Teacher工程师 Engineering:武汉科技大学问题问题(Problem)(Problem)v学校有教师和工程师:武汉科技大学问题问题(Problem)(Problem) abstract class Employee private string name; private double income; private int vacationDays; public string Name get retu

2、rn name; set name = value; public double Income get return income; set income = value; public int VacationDays get return vacationDays; set vacationDays = value; :武汉科技大学问题问题(Problem)(Problem) class Teacher : Employee public Teacher(string name, double income,int vacationDays) Name = name; Income = i

3、ncome; VacationDays = vacationDays; class Engineer : Employee public Engineer(string name, double income,int vacationDays) Name = name; Income = income; VacationDays = vacationDays; :武汉科技大学问题问题(Problem)(Problem) static void Main(string args) Teacher zhangsan = new Teacher(张三, 2500.0, 14); Engineer l

4、isi = new Engineer(李四, 3500.0, 16); Console.WriteLine(zhangsan.Name + 的收入是+ zhangsan.Income + , 假期是+ zhangsan.VacationDays); Console.WriteLine(lisi.Name + 的收入是 + lisi.Income + , 假期是 + lisi.VacationDays); Console.ReadKey(); 如何批量给员工加薪,加假期?如何批量给员工加薪,加假期?:武汉科技大学主要内容主要内容模式动机与定义1模式结构与分析2模式实例与解析3模式效果与应用4:武

5、汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式动机v模式名称:访问者模式(Visitor)v对于系统中的某些对象,它们存储在同一个集合中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其访问方式有所不同,访问者模式为解决这类问题而诞生。:武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式动机v在实际使用时,对同一集合对象的操作并不是唯一的,对相同的元素对象可能存在多种不同的操作方式。v而且这些操作方式并不稳定,可能还需要增加新的操作,以满足新的业务需求。v此时,访问者模式就是一个值得考虑的解决方案

6、。:武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式定义 v访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作。它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。:武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式结构 :武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v参与者 vVistor:抽象访问者 vConcreteVisitor:具体访问者 vElement:抽象元素 vConcreteElement:具体元素 vObjectStr

7、ucture:对象结构:武汉科技大学访问者模式访问者模式(Visitor)(Visitor):武汉科技大学问题问题(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 Vacat

8、ionDays get return vacationDays; set vacationDays = value; abstract public void Accept(Visitor visitor); :武汉科技大学问题问题(Problem)(Problem) class Teacher : Employee public Teacher(string name, double income,int vacationDays) Name = name; Income = income; VacationDays = vacationDays; public override void

9、Accept(Visitor visitor) visitor.Visit(this); class Engineer : Employee public Engineer(string name, double income,int vacationDays) Name = name; Income = income; VacationDays = vacationDays; public override void Accept(Visitor visitor) visitor.Visit(this); :武汉科技大学访问者模式访问者模式(Visitor)(Visitor) abstrac

10、t class Visitor abstract public void Visit(Employee element); class IncomeVisitor : Visitor public override void Visit(Employee element) element.Income *= 1.10; Console.WriteLine(element.Name + 的新工资是: + element.Income); class VacationVisitor : Visitor public override void Visit(Employee element) ele

11、ment.VacationDays += 3; Console.WriteLine(element.Name + 的新假期是 + element.VacationDays); :武汉科技大学访问者模式访问者模式(Visitor)(Visitor) class Employees private ArrayList employees = new ArrayList(); public void Attach(Employee employee) employees.Add(employee); public void Detach(Employee employee) employees.Re

12、move(employee); public void Accept(Visitor visitor) foreach (Employee e in employees) e.Accept(visitor); :武汉科技大学访问者模式访问者模式(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.At

13、tach(zhangsan); e.Attach(lisi); IncomeVisitor v1 = new IncomeVisitor(); VacationVisitor v2 = new VacationVisitor(); e.Accept(v1); e.Accept(v2); Console.Read(); :武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式结构 :武汉科技大学访问者模式访问者模式(Visitor)(Visitor) abstract class Element abstract class Element / Methods / Metho

14、ds abstract public void Accept(Visitor visitor); abstract public void Accept(Visitor visitor); :武汉科技大学访问者模式访问者模式(Visitor)(Visitor) class ConcreteElementA : Element class ConcreteElementA : Element / Methods / Methods override public void Accept(Visitor visitor) override public void Accept(Visitor vi

15、sitor) visitor.VisitConcreteElementA(this); visitor.VisitConcreteElementA(this); public void OperationA() public void OperationA() class ConcreteElementB : Element class ConcreteElementB : Element / Methods / Methods override public void Accept(Visitor visitor) override public void Accept(Visitor vi

16、sitor) visitor.VisitConcreteElementB(this); visitor.VisitConcreteElementB(this); public void OperationB() public void OperationB() :武汉科技大学访问者模式访问者模式(Visitor)(Visitor) class ObjectStructure class ObjectStructure / Fields / Fields private ArrayList elements = new ArrayList(); private ArrayList element

17、s = new ArrayList(); / Methods / Methods public void Attach(Element element) public void Attach(Element element) elements.Add(element); elements.Add(element); public void Detach(Element element) public void Detach(Element element) elements.Remove(element); elements.Remove(element); public void Accep

18、t(Visitor visitor) public void Accept(Visitor visitor) foreach (Element e in elements) foreach (Element e in elements) e.Accept(visitor); e.Accept(visitor); :武汉科技大学访问者模式访问者模式(Visitor)(Visitor) abstract class Visitor abstract class Visitor / Methods / Methods abstract public void VisitConcreteElement

19、A( abstract public void VisitConcreteElementA( ConcreteElementA concreteElementA); ConcreteElementA concreteElementA); abstract public void VisitConcreteElementB( abstract public void VisitConcreteElementB( ConcreteElementB concreteElementB); ConcreteElementB concreteElementB); :武汉科技大学访问者模式访问者模式(Vis

20、itor)(Visitor) class ConcreteVisitor1 : Visitor class ConcreteVisitor1 : Visitor / Methods / Methods override public void VisitConcreteElementA( override public void VisitConcreteElementA( ConcreteElementA concreteElementA) ConcreteElementA concreteElementA) Console.WriteLine(0 visited by 1, Console

21、.WriteLine(0 visited by 1, concreteElementA, this); concreteElementA, this); override public void VisitConcreteElementB( override public void VisitConcreteElementB( ConcreteElementB concreteElementB) ConcreteElementB concreteElementB) Console.WriteLine(0 visited by 1, Console.WriteLine(0 visited by

22、1, concreteElementB, this); concreteElementB, this); :武汉科技大学访问者模式访问者模式(Visitor)(Visitor) class ConcreteVisitor2 : Visitor class ConcreteVisitor2 : Visitor / Methods / Methods override public void VisitConcreteElementA( override public void VisitConcreteElementA( ConcreteElementA concreteElementA) Co

23、ncreteElementA concreteElementA) Console.WriteLine(0 visited by 1, Console.WriteLine(0 visited by 1, concreteElementA, this); concreteElementA, this); override public void VisitConcreteElementB( override public void VisitConcreteElementB( ConcreteElementB concreteElementB) ConcreteElementB concreteE

24、lementB) Console.WriteLine(0 visited by 1, Console.WriteLine(0 visited by 1, concreteElementB, this); concreteElementB, this); :武汉科技大学访问者模式访问者模式(Visitor)(Visitor) static void Main(string args) static void Main(string args) / Setup structure / Setup structure ObjectStructure o = new ObjectStructure()

25、; ObjectStructure o = new ObjectStructure(); o.Attach(new ConcreteElementA(); o.Attach(new ConcreteElementA(); o.Attach(new ConcreteElementB(); o.Attach(new ConcreteElementB(); / Create visitor objects / Create visitor objects ConcreteVisitor1 v1 = new ConcreteVisitor1(); ConcreteVisitor1 v1 = new C

26、oncreteVisitor1(); ConcreteVisitor2 v2 = new ConcreteVisitor2(); ConcreteVisitor2 v2 = new ConcreteVisitor2(); / Structure accepting visitors / Structure accepting visitors o.Accept(v1); o.Accept(v1); o.Accept(v2); o.Accept(v2); Console.ReadKey(); Console.ReadKey(); :武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v访问者模式的优点如下v访问者模式使得增加新的操作变得很容易。如果一些操作依赖于一个复杂的结构对象的话,那么一般而言,增加新的操作会很复杂。而使用访问者模式,增加新的操作就意味着增加一个新的访问者类,因此将变得很容易。 v访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。 v访问者模式可以跨过几个类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论