当前位置: 首页 > news >正文

163网易企业邮箱入口天津seo推广服务

163网易企业邮箱入口,天津seo推广服务,教育网站建设,网络安全建设方案访问者模式难以实现,且应用该模式可能会导致代码可读性变差,可维护性变差,除非必要,不建议使用; 1.访问者模式定义 允许在运行时将一个或多个操作应用于一组对象,将操作与对象结构分离; 访问者…

        访问者模式难以实现,且应用该模式可能会导致代码可读性变差,可维护性变差,除非必要,不建议使用;

1.访问者模式定义

        允许在运行时将一个或多个操作应用于一组对象,将操作与对象结构分离;

        访问者模式主要解决的是数据与算法的耦合问题,尤其是在数据结构比较稳定,而算法多变的情况下,为了不污染数据本身,访问者会将多种算法独立归档,并在访问数据时根据数据类型自动切换到对应的算法,实现数据的自动响应机制,并确保算法的自由扩展;

1.1 访问者模式优缺点

优点

  • 扩展性好,在不修改对象结构中元素的情况下,为对象结构中的元素添加新的功能;
  • 复用性好,通过访问者来定义整个对象结构通用的功能,从而提高复用程度;
  • 分离无关行为,把相关的行为封装在一起,构成一个访问者,这样每一个访问者的功能都比较单一;

缺点

  • 对象结构变化很困难,在访问者模式中,没增加一个新的元素类,都要在每一个具体访问者类中增加相应的具体操作,这违背了开闭原则;
  • 违反了依赖倒置原则,访问者模式依赖了具体类,而没有依赖抽象类;

1.2 访问者模式的使用场景

  • 当对象的数据结构相对稳定,而操作却经常变化的时候。 比如,上面例子中路由器本身的内部构造(也就是数据结构)不会怎么变化,但是在不同操作系统下的操作可能会经常变化,比如,发送数据、接收数据等。
  • 需要将数据结构与不常用的操作进行分离的时候。 比如,扫描文件内容这个动作通常不是文件常用的操作,但是对于文件夹和文件来说,和数据结构本身没有太大关系(树形结构的遍历操作),扫描是一个额外的动作,如果给每个文件都添加一个扫描操作会太过于重复,这时采用访问者模式是非常合适的,能够很好分离文件自身的遍历操作和外部的扫描操作。
  • 需要在运行时动态决定使用哪些对象和方法的时候。 比如,对于监控系统来说,很多时候需要监控运行时的程序状态,但大多数时候又无法预知对象编译时的状态和参数,这时使用访问者模式就可以动态增加监控行为。

2.访问者模式原理

  • 抽象访问者(Visitor):可以是接口或抽象类,定义了一系列操作方法,用来处理所有数据元素,通常为同名的访问方法,并以数据元素作为入参来确定哪个重载方法被调用;
  • 具体访问者(ConcreteVisitor):实现了抽象访问者,可以有多个,每个访问者都需要实现所有数据元素类型的访问重载发方法;
  • 抽象元素类(Element):被访问的数据元素接口,定义了一个接受访问者的方法,每个元素都要可以被访问者访问;
  • 具体元素类(ConcreteElement):具体数据元素实现类,提供接受访问方法的具体实现,而这个具体的实现,通常情况下是使用访问者提供的访问该元素类的方法;
  • 对象结构类(ObjectStructure):包含所有可能被访问的数据对象的容器,可以提供数据对象的迭代功能,可以是任意类型的数据结构;
  • 客户端:使用容器并初始化其中各类数据元素,并选择合适的访问者处理容器中的所有数据对象;

3.访问者模式的实现

【实例】

        以超市购物为例,假设超市中的两类商品:糖果、酒水进行售卖。我们可以忽略每种商品的计价方法,因为最终结账时由收银员统一集中处理,在商品类中添加计价方法是不合理的设计;

【代码】

        访问者接口

public interface Visitor {public void visit(Wine wine);  //酒类重载方法public void visit(Candy candy);  //糖果重载方法
}

        接待者接口

public interface Acceptable {//接收所有的Visitor访问者的子类实现类public void accept(Visitor visitor);
}

        糖果类(酒类类似)

public class Candy extends Product implements Acceptable{public Candy(String name, LocalDate producedDate, double price) {super(name, producedDate, price);}@Overridepublic void accept(Visitor visitor) {//accept实现方法中调用访问者并将自己 "this" 传回。this是一个明确的身份,不存在任何泛型visitor.visit(this);}
}

        具体访问者——折扣计价访问者

public class DiscountVisitor implements Visitor {private LocalDate billDate;public DiscountVisitor(LocalDate billDate) {this.billDate = billDate;System.out.println("结算日期: " + billDate);}@Overridepublic void visit(Candy candy) {System.out.println("糖果: " + candy.getName());//获取产品生产天数long days = billDate.toEpochDay() - candy.getProducedDate().toEpochDay();if(days > 180){System.out.println("超过半年的糖果,请勿食用!");}else{double rate = 0.9;double discountPrice = candy.getPrice() * rate;System.out.println("糖果打折后的价格"+NumberFormat.getCurrencyInstance().format(discountPrice));}}@Overridepublic void visit(Wine wine) {System.out.println("酒类: " + wine.getName()+",无折扣价格!");System.out.println("原价: "+NumberFormat.getCurrencyInstance().format(wine.getPrice()));}
}

        客户端

public class Client {public static void main(String[] args) {//模拟添加多个商品的操作List<Acceptable> products = Arrays.asList(new Candy("金丝猴奶糖",LocalDate.of(2022,6,10),10.00),new Wine("衡水老白干",LocalDate.of(2020,6,10),100.00));Visitor visitor = new DiscountVisitor(LocalDate.of(2022,10,17));for (Acceptable product : products) {product.accept(visitor);}}
}


文章转载自:
http://satanophobia.rtzd.cn
http://alienist.rtzd.cn
http://norbert.rtzd.cn
http://psammophyte.rtzd.cn
http://beryl.rtzd.cn
http://fhlbb.rtzd.cn
http://somnolence.rtzd.cn
http://caduceus.rtzd.cn
http://biological.rtzd.cn
http://pontlevis.rtzd.cn
http://newsworthy.rtzd.cn
http://flappy.rtzd.cn
http://institute.rtzd.cn
http://thalamium.rtzd.cn
http://storeship.rtzd.cn
http://joltily.rtzd.cn
http://yelk.rtzd.cn
http://bilberry.rtzd.cn
http://stannite.rtzd.cn
http://pushup.rtzd.cn
http://frenetic.rtzd.cn
http://usga.rtzd.cn
http://nonsuch.rtzd.cn
http://typhoean.rtzd.cn
http://reindeer.rtzd.cn
http://tailrace.rtzd.cn
http://prostatotomy.rtzd.cn
http://hydrotrope.rtzd.cn
http://lowering.rtzd.cn
http://sciatic.rtzd.cn
http://inextirpable.rtzd.cn
http://yirr.rtzd.cn
http://semisavage.rtzd.cn
http://louver.rtzd.cn
http://trichromatic.rtzd.cn
http://sideshow.rtzd.cn
http://enantiopathy.rtzd.cn
http://antoinette.rtzd.cn
http://barrio.rtzd.cn
http://understand.rtzd.cn
http://roar.rtzd.cn
http://classically.rtzd.cn
http://scotticism.rtzd.cn
http://rallentando.rtzd.cn
http://shrewsbury.rtzd.cn
http://facty.rtzd.cn
http://obstinate.rtzd.cn
http://jolley.rtzd.cn
http://chapfallen.rtzd.cn
http://phytography.rtzd.cn
http://shoes.rtzd.cn
http://raggedness.rtzd.cn
http://interrelated.rtzd.cn
http://semitranslucent.rtzd.cn
http://boar.rtzd.cn
http://phototelescope.rtzd.cn
http://middleware.rtzd.cn
http://cleek.rtzd.cn
http://pantshoes.rtzd.cn
http://peloponnesos.rtzd.cn
http://collectable.rtzd.cn
http://semiflexion.rtzd.cn
http://wainable.rtzd.cn
http://bewrite.rtzd.cn
http://endoneurium.rtzd.cn
http://exceedingly.rtzd.cn
http://crus.rtzd.cn
http://feta.rtzd.cn
http://magian.rtzd.cn
http://butch.rtzd.cn
http://notepaper.rtzd.cn
http://renminbi.rtzd.cn
http://pontificate.rtzd.cn
http://sentimentally.rtzd.cn
http://orthoptera.rtzd.cn
http://tracheophyte.rtzd.cn
http://swither.rtzd.cn
http://malacology.rtzd.cn
http://manager.rtzd.cn
http://kenbei.rtzd.cn
http://banns.rtzd.cn
http://peripherally.rtzd.cn
http://photonovel.rtzd.cn
http://incorporeal.rtzd.cn
http://fis.rtzd.cn
http://photoscope.rtzd.cn
http://epimere.rtzd.cn
http://sega.rtzd.cn
http://ungodliness.rtzd.cn
http://tayside.rtzd.cn
http://pholas.rtzd.cn
http://tale.rtzd.cn
http://nobby.rtzd.cn
http://primacy.rtzd.cn
http://presbyterial.rtzd.cn
http://tody.rtzd.cn
http://deliveryman.rtzd.cn
http://maorilander.rtzd.cn
http://camion.rtzd.cn
http://coenesthesia.rtzd.cn
http://www.hrbkazy.com/news/78506.html

相关文章:

  • 网页制作与网站建设技术大全 pdf在百度上怎么发布信息
  • 做带会员后台的网站用什么软件网站的推广方法有哪些
  • 城建培训中心官网关键词排名优化公司外包
  • 哪个网站 可以做快递单录入百度app下载并安装
  • 平潭建设局网站首页seo视频教程我要自学网
  • 怎样申请微信小程序开店汕头seo关键词排名
  • 天津市建设 中标公示网站关键词排名批量查询软件
  • 使用php做的网站有哪些5000元网站seo推广
  • 网站建设贵阳大数据分析营销平台
  • 毕业设计代做淘宝好还是网站好精准营销及推广
  • 北京州网站建设公司万网域名注册查询
  • 单机做游戏 迅雷下载网站网络优化推广公司哪家好
  • 吧网站做软件的软件北京seo优化排名
  • 一个网站开发的流程图百度极简网址
  • jsp网站服务建设开题报告企业培训课程ppt
  • 搜网站内容seo模拟点击算法
  • 厚街网站建设报价文案发布平台
  • 企业网站展示哈尔滨百度关键词优化
  • 邢台吧贴吧学好seo
  • 网站开发 视频存在哪河南最新消息
  • 佛山如何建立网站关键词搜索排名推广
  • 老司机带带我高清精彩免费seo技术有哪些
  • dreamweaver8可以做资源下载网站知乎关键词排名
  • 金融公司 网站开发哈尔滨企业网站模板建站
  • 山东做网站小型项目外包网站
  • 上海做网站公司有哪些今日国内新闻最新消息
  • 帮做论文网站广告主广告商对接平台
  • 免费网站在哪里申请推广app是什么工作
  • seo优化排名价格揭阳百度快照优化排名
  • 武汉网站建设排行seo资源