欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    设计模式访问者模式Visitor.pptx

    • 资源ID:91508097       资源大小:1.48MB        全文页数:32页
    • 资源格式: PPTX        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    设计模式访问者模式Visitor.pptx

    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 return 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=income;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 lisi =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武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式动机模式名称:访问者模式(Visitor)对于系统中的某些对象,它们存储在同一个集合中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其访问方式有所不同,访问者模式为解决这类问题而诞生。武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式动机在实际使用时,对同一集合对象的操作并不是唯一的,对相同的元素对象可能存在多种不同的操作方式。而且这些操作方式并不稳定,可能还需要增加新的操作,以满足新的业务需求。此时,访问者模式就是一个值得考虑的解决方案。武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式定义 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作。它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式结构 武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v参与者 Vistor:抽象访问者 ConcreteVisitor:具体访问者 Element:抽象元素 ConcreteElement:具体元素 ObjectStructure:对象结构武汉科技大学访问者模式访问者模式(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 VacationDays 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 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)abstract 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)element.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.Remove(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.Attach(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)abstractabstract classclass ElementElement /Methods/Methods abstractabstract publicpublic voidvoid Accept(Accept(VisitorVisitor visitor);visitor);武汉科技大学访问者模式访问者模式(Visitor)(Visitor)classclass ConcreteElementAConcreteElementA:ElementElement /Methods/Methods overrideoverride publicpublic voidvoid Accept(Accept(VisitorVisitor visitor)visitor)visitor.VisitConcreteElementA(visitor.VisitConcreteElementA(thisthis););publicpublic voidvoid OperationA()OperationA()classclass ConcreteElementBConcreteElementB:ElementElement /Methods/Methods overrideoverride publicpublic voidvoid Accept(Accept(VisitorVisitor visitor)visitor)visitor.VisitConcreteElementB(visitor.VisitConcreteElementB(thisthis););publicpublic voidvoid OperationB()OperationB()武汉科技大学访问者模式访问者模式(Visitor)(Visitor)classclass ObjectStructureObjectStructure /Fields/Fields privateprivate ArrayListArrayList elements=elements=newnew ArrayListArrayList();();/Methods/Methods publicpublic voidvoid Attach(Attach(ElementElement element)element)elements.Add(element);elements.Add(element);publicpublic voidvoid Detach(Detach(ElementElement element)element)elements.Remove(element);elements.Remove(element);publicpublic voidvoid Accept(Accept(VisitorVisitor visitor)visitor)foreachforeach(ElementElement e e inin elements)elements)e.Accept(visitor);e.Accept(visitor);武汉科技大学访问者模式访问者模式(Visitor)(Visitor)abstractabstract classclass VisitorVisitor /Methods/Methods abstractabstract publicpublic voidvoid VisitConcreteElementA(VisitConcreteElementA(ConcreteElementAConcreteElementA concreteElementA);concreteElementA);abstractabstract publicpublic voidvoid VisitConcreteElementB(VisitConcreteElementB(ConcreteElementBConcreteElementB concreteElementB);concreteElementB);武汉科技大学访问者模式访问者模式(Visitor)(Visitor)classclass ConcreteVisitor1ConcreteVisitor1:VisitorVisitor /Methods/Methods overrideoverride publicpublic voidvoid VisitConcreteElementA(VisitConcreteElementA(ConcreteElementAConcreteElementA concreteElementA)concreteElementA)ConsoleConsole.WriteLine(.WriteLine(0 visited by 10 visited by 1,concreteElementA,concreteElementA,thisthis););overrideoverride publicpublic voidvoid VisitConcreteElementB(VisitConcreteElementB(ConcreteElementBConcreteElementB concreteElementB)concreteElementB)ConsoleConsole.WriteLine(.WriteLine(0 visited by 10 visited by 1,concreteElementB,concreteElementB,thisthis););武汉科技大学访问者模式访问者模式(Visitor)(Visitor)classclass ConcreteVisitor2ConcreteVisitor2:VisitorVisitor /Methods/Methods overrideoverride publicpublic voidvoid VisitConcreteElementA(VisitConcreteElementA(ConcreteElementAConcreteElementA concreteElementA)concreteElementA)ConsoleConsole.WriteLine(.WriteLine(0 visited by 10 visited by 1,concreteElementA,concreteElementA,thisthis););overrideoverride publicpublic voidvoid VisitConcreteElementB(VisitConcreteElementB(ConcreteElementBConcreteElementB concreteElementB)concreteElementB)ConsoleConsole.WriteLine(.WriteLine(0 visited by 10 visited by 1,concreteElementB,concreteElementB,thisthis););武汉科技大学访问者模式访问者模式(Visitor)(Visitor)staticstatic voidvoid Main(Main(stringstring args)args)/Setup structure/Setup structure ObjectStructureObjectStructure o=o=newnew ObjectStructureObjectStructure();();o.Attach(o.Attach(newnew ConcreteElementAConcreteElementA();();o.Attach(o.Attach(newnew ConcreteElementBConcreteElementB();();/Create visitor objects/Create visitor objects ConcreteVisitor1ConcreteVisitor1 v1=v1=newnew ConcreteVisitor1ConcreteVisitor1();();ConcreteVisitor2ConcreteVisitor2 v2=v2=newnew ConcreteVisitor2ConcreteVisitor2();();/Structure accepting visitors/Structure accepting visitors o.Accept(v1);o.Accept(v1);o.Accept(v2);o.Accept(v2);ConsoleConsole.ReadKey();.ReadKey();武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v访问者模式的优点如下访问者模式使得增加新的操作变得很容易。如果一些操作依赖于一个复杂的结构对象的话,那么一般而言,增加新的操作会很复杂。而使用访问者模式,增加新的操作就意味着增加一个新的访问者类,因此将变得很容易。访问者模式将有关的行为集中到一个访问者对象中,而不是分散到一个个的节点类中。访问者模式可以跨过几个类的等级结构访问属于不同的等级结构的成员类。武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v访问者模式的缺点如下破坏封装。访问者模式要求访问者对象访问并调用每一个节点对象的操作,这隐含了一个对所有节点对象的要求:它们必须暴露一些自己的操作和内部状态。不然,访问者的访问就变得没有意义。由于访问者对象自己会积累访问操作所需的状态,从而使这些状态不再存储在节点对象中,这也是破坏封装的。增加新的节点类变得很困难。每增加一个新的节点都意味着要在抽象访问者角色中增加一个新的抽象操作,并在每一个具体访问者类中增加相应的具体操作。武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式使用定义对象结构的类很少改变,但经常需要在此结构上定义新的操作。对象需要添加很多不同的并且不相关的操作,而我们想避免让这些操作“污染”这些对象的类。访问者模式使得我们可以将相关的操作集中起来定义在一个类中。当该对象结构被很多应用共享时,用访问者模式让每个应用仅包含需要用到的操作。武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式应用访问者模式中对象结构存储了不同类型的元素对象,以供不同访问者访问。访问者模式包括两个层次结构,一个是访问者层次结构,提供了抽象访问者和具体访问者,一个是元素层次结构,提供了抽象元素和具体元素。相同的访问者可以以不同的方式访问不同的元素,相同的元素可以接受不同访问者以不同访问方式访问。在访问者模式中,增加新的访问者无须修改原有系统,系统具有较好的可扩展性。武汉科技大学访问者模式访问者模式(Visitor)(Visitor)v模式小结访问者模式的主要优点在于使得增加新的访问操作变得很容易,将有关元素对象的访问行为集中到一个访问者对象中,而不是分散到一个个的元素类中,还可以跨过类的等级结构访问属于不同的等级结构的元素类,让用户能够在不修改现有类层次结构的情况下,定义该类层次结构的操作;其主要缺点在于增加新的元素类很困难,而且在一定程度上破坏系统的封装性。LOGO

    注意事项

    本文(设计模式访问者模式Visitor.pptx)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开