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

抚宁网站建设昆山网站设计公司

抚宁网站建设,昆山网站设计公司,淘宝推广平台有哪些,百度 网站地图怎么做访问者模式是什么? 表示一个作用于某对象结构中的各元素的操作,它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作 访问者模式解决什么问题? 男女在不同情境下表现的不同 abstract class Person {protected String action…

访问者模式是什么?

表示一个作用于某对象结构中的各元素的操作,它使你可以再不改变各元素的类的前提下定义作用于这些元素的新操作

访问者模式解决什么问题?

男女在不同情境下表现的不同

abstract class Person {protected String action;public String getAction() {return action;}public void setAction(String action) {this.action = action;}public abstract void getConclusion();
}class Man extends Person {@Overridepublic void getConclusion() {if ("逛街".equals(action)) {System.out.println(this.getClass().getSimpleName() + action + "买完就走");} else if ("吃饭".equals(action)) {System.out.println(this.getClass().getSimpleName() + action + "狼吞虎咽");}}
}class Woman extends Person {@Overridepublic void getConclusion() {if ("逛街".equals(action)) {System.out.println(this.getClass().getSimpleName() + action + "到处乱逛");} else if ("吃饭".equals(action)) {System.out.println(this.getClass().getSimpleName() + action + "细嚼慢咽");}}
}

使用时

List<Person> personList = new ArrayList<>();Man man = new Man();
man.setAction("逛街");
personList.add(man);Woman woMan = new Woman();
woMan.setAction("逛街");
personList.add(woMan);for (Person person : personList) {person.getConclusion();
}

当要新增新的Action时,要修改两者的代码

访问者模式实现

创建不同的表现

abstract class Action {abstract void getManConclusion(Man concreteElementA);abstract void getWomanConclusion(Woman concreteElementB);
}class Shopping extends Action {@Overridevoid getManConclusion(Man concreteElementA) {System.out.println(concreteElementA.getClass().getSimpleName() + " " + getClass().getSimpleName() + "买完就走");}@Overridevoid getWomanConclusion(Woman concreteElementB) {System.out.println(concreteElementB.getClass().getSimpleName() + " " + getClass().getSimpleName() + "到处乱逛");}
}class eat extends Action {@Overridevoid getManConclusion(Man concreteElementA) {System.out.println(concreteElementA.getClass().getSimpleName() + " " + getClass().getSimpleName() + "狼吞虎咽");}@Overridevoid getWomanConclusion(Woman concreteElementB) {System.out.println(concreteElementB.getClass().getSimpleName() + " " + getClass().getSimpleName() + "细嚼慢咽");}
}

创建男女,这里采用双分派,先将Action作为传递给男/女,再将男/女作为参数传入给Action,意味着执行结果取决于两个调用者的类型

abstract class Person {abstract void accept(Action visitor);
}class Man extends Person {@Overridevoid accept(Action visitor) {visitor.getManConclusion(this);}
}class Woman extends Person {@Overridevoid accept(Action visitor) {visitor.getWomanConclusion(this);}
}

创建对象结构统一管理和遍历

class ObjStructure {private List<Person> mPersonList = new ArrayList<>();public void attach(Person person) {mPersonList.add(person);}public void detach(Person person) {mPersonList.remove(person);}public void display(Action visitor) {for (Person person : mPersonList) {person.accept(visitor);}}
}

调用时

 ObjStructure objStructure = new ObjStructure();objStructure.attach(new Man());objStructure.attach(new Woman());objStructure.display(new Shopping());objStructure.display(new eat());
  • 当要增加Action时,只需要新增一个类和修改上面的代码
  • 但是如果新增一个外星人的话,就要在每个Action中新增对应方法,故访问者模式适用于数据结构稳定但算法易变化的情况
http://www.yayakq.cn/news/696977/

相关文章:

  • 做淘宝网站的编程实例网站文字大小代码
  • 网站建设中中文模板合肥模板网站建设软件
  • 企业网站城市分站系统深圳产品设计公司有哪些
  • 网站首页的名字通常是建设银行网站百度一下
  • 网站推广策划的策略自驾游黄山风景区旅游攻略
  • 上海微信网站建设公司电话wordpress app主题
  • 公司禁用网站怎么做网站建设年份查询
  • 怎么做切片网站建站加盟
  • 网站备案需要哪些东西招聘网站套餐
  • 网站建设模板平台域名解析工具
  • 有了域名怎么做网站专业企业网站开发联系电话
  • 网站建 设方案说明书新增网站和新增接入
  • 珠海住房和建设局网站如何让谷歌收录网站
  • 网站平台建设实训心得体会佛山做网站优化公司
  • 筑巢网站建设能答题做试卷的网站
  • 北京做网站企业网站模板 html
  • 给自己的网站做关键词流程网站备案链接地址
  • 太仓网站公司北京电商网站开发公司
  • 网站运营需要学什么默认线路正在切换线路
  • 广东电子商务网站建设价格苏州企业门户网站
  • 做金融网站需要什么营业执照蜀icp备 网站建设中企动力成都
  • 网站制作技术介绍网站退出率是什么意思
  • 品牌手机网站开发财富半岛建设购物网站
  • 开网店要建网站平台吗wordpress 整站语言
  • 网站怎么做数据库榆林市网站seo
  • 一个域名可以做中英文两个网站吗网站做下CDN防护
  • 国外酷炫网站有哪些wordpress 框架
  • 搜索推广网站哪家做的最好莱芜益寿堂网站
  • h5游戏网站开发葫芦岛网站建设
  • 面试学校网站开发做视频网站怎么对接云盘