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

记事本网站开发/建站模板网站

记事本网站开发,建站模板网站,德州做网站建设的公司哪家好,展示空间设计作品系列文章 【设计模式】七大设计原则 【设计模式】第一章:单例模式 【设计模式】第二章:工厂模式 【设计模式】第三章:建造者模式 【设计模式】第四章:原型模式 【设计模式】第五章:适配器模式 【设计模式】第六章&…

系列文章

【设计模式】七大设计原则
【设计模式】第一章:单例模式
【设计模式】第二章:工厂模式
【设计模式】第三章:建造者模式
【设计模式】第四章:原型模式
【设计模式】第五章:适配器模式
【设计模式】第六章:装饰器模式
【设计模式】第七章:代理模式
【设计模式】第八章:桥接模式
【设计模式】第九章:外观模式 / 门面模式
【设计模式】第十章:组合模式
【设计模式】第十一章:享元模式
【设计模式】第十二章:观察者模式
【设计模式】第十三章:模板方法模式
【设计模式】第十四章:策略模式
【设计模式】第十五章:责任链模式
【设计模式】第十六章:迭代器模式
【设计模式】第十七章:状态模式
【设计模式】第十八章:备忘录模式
【设计模式】第十九章:访问者模式
【设计模式】第二十章:解释器模式
【设计模式】第二十一章:命令模式
【设计模式】第二十二章:中介者模式


文章目录

  • 系列文章
  • 中介者模式
  • 一、定义
  • 二、角色分类
  • 三、实现方式
    • UML图
    • 具体实现
  • 四、应用场景
  • 五、优缺点
    • 优点
    • 缺点


中介者模式

一、定义

摘自百度百科: 用一个中介对象来封装一系列对象的交互,从而把一批原来可能是交互关系复杂的对象转换成一组松散耦合的中间对象,以有利于维护和修改。


二、角色分类

抽象中介者(Mediator)

声明了同时对象到中介者对象的接口

具体中介者(Concrete Mediator)

其为具体中介者的子类,从具体的同事对象接收消息,向具体同事发出命令

抽象同事角色(Colleague)

声明了中介者对象接口,它只知道中介者对象,而不知道其他同事对象

具体同事角色(Concrete Colleague)

其为抽象同事的子类,每个具体同事类都知道自己在小范围内的行为,而不知道其在大范围内的目的

客户角色(Client)

具体调用方法的角色


三、实现方式

UML图

在这里插入图片描述

具体实现

抽象中介者(Mediator)

public abstract class Mediator {protected ConcreteColleagueA colleagueA;protected ConcreteColleagueB colleagueB;public void setColleagueA(ConcreteColleagueA colleague) {this.colleagueA = colleague;}public void setColleagueB(ConcreteColleagueB colleague) {this.colleagueB = colleague;}public abstract void transferA();public abstract void transferB();
}

具体中介者(Concrete Mediator)

public class ConcreteMediator extends Mediator {/*** 由具体同事A,向具体同事B发出指令*/@Overridepublic void transferA() {this.colleagueB.selfMethodB();}/*** 由具体同事B,向具体同事A发出指令*/@Overridepublic void transferB() {this.colleagueA.selfMethodA();}
}

抽象同事类(Colleague)

public abstract class Colleague {protected Mediator mediator;public Colleague(Mediator mediator) {this.mediator = mediator;}
}

具体同事类(Concrete Colleague)

public class ConcreteColleagueA extends Colleague {public ConcreteColleagueA(Mediator mediator) {super(mediator);this.mediator.setColleagfueA(this);}/*** 自有方法*/public void selfMethodA() {System.out.println("同事A收到中介协作通知")}/*** 依赖方法*/public void depMethodA() {System.out.println(this.getClass().getSimpleName()+ " depMethodA通知中介者进行转发协作")}
}
public class ConcreteColleagueB extends Colleague {public ConcreteColleagueB(Mediator mediator) {super(mediator);this.mediator.setColleageB(this);}/*** 自有方法*/public void selfMethodB() {System.out.println("同事B收到中介协作通知");}/*** 依赖方法*/public void depMethodB() {System.out.println(this.getClass().getSimpleName() + " depMethodB通知中介者进行转发协作");// 中介者进行转发协作this.mediator.transferB();}
}

客户角色(Client)

public class Client {public static void main(String[] args) {// 创建抽象中介者Mediator mediator = new ConcreteMediator();// 具体同事类ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator);ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator);// 中介者进行转发协作,A转发给BcolleagueA.depMethodA();System.out.println("-------------------------");// 中介者进行转发协作,B转发给AcolleagueB.depMethodB();}
}

运行结果

ConcreteColleagueA depMethodA通知中介者进行转发协作
同事B收到中介协作通知
-------------------------
ConcreteColleagueB depMethodB通知中介者进行转发协作
同事A收到中介协作通知

四、应用场景

以下部分内容摘自菜鸟教程

意图: 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。

主要解决: 对于一些固定文法构建一个解释句子的解释器。

何时使用: 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。

如何解决: 构建语法树,定义终结符与非终结符。

关键代码: 构建环境类,包含解释器之外的一些全局信息,一般是 HashMap。

应用实例: 编译器、运算表达式计算。

使用场景:

  1. 可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。
  2. 一些重复出现的问题可以用一种简单的语言来进行表达。
  3. 一个简单语法需要解释的场景。

注意事项: 可利用场景比较少,JAVA 中如果碰到可以用 expression4J 代替。


五、优缺点

优点

  1. 可扩展性比较好,灵活。
  2. 增加了新的解释表达式的方式。
  3. 易于实现简单文法。

缺点

  1. 可利用场景比较少。
  2. 对于复杂的文法比较难维护。
  3. 解释器模式会引起类膨胀。
  4. 解释器模式采用递归调用方法。
http://www.jmfq.cn/news/4854205.html

相关文章:

  • 织梦做音乐网站/合肥网站快速排名提升
  • 怎么看网站做没做备案/网络营销的主要内容有哪些
  • 建设一个网站的需求分析/外链工具
  • 网站开发项目可行性分析/曲靖seo
  • 重庆微信网站开发公司/免费的自助建站
  • 网站建设软件排行/汉中网站seo
  • 闵行网站搭建哪里有/深圳网站建设推广
  • 免费诶网站建设/百度推广seo是什么意思
  • 二级网站模板/打广告
  • 网站建设在哪里发布/株洲网站设计外包首选
  • 专业做网文的网站有哪些/网络推广文案有哪些
  • 冷库建设网站/什么平台可以发广告引流
  • 国内知名网站建设/新闻最近新闻10条
  • 如何设计网站制作方案/企点
  • 网站建设企业文化/软文写作什么意思
  • 网络设计概念/百度首页优化排名
  • wordpress 网站收录/线上拓客渠道有哪些
  • 买做指甲的材料在哪个网站/如何自己做一个软件
  • 泉州晋江网站建设/免费引流推广怎么做
  • 微信制作网站/引流人脉推广软件
  • 怎么做晒鱼的网站/百度seo关键词排名优化工具
  • 怎么查网站的关键词/最厉害的搜索引擎
  • 设计师培训多久/seo如何快速排名百度首页
  • 太原市微网站建设/软文广告经典案例300
  • 大型网站建设定制/营销的目的有哪些
  • 果合gohe网站建设/东莞市网络seo推广企业
  • 电子商务战略选择 网站建设建议/廊坊关键词排名优化
  • 户外媒体网站建设免费/seo文章生成器
  • 网站建设 网站优化/全国网站排名
  • wordpress网站前台打开慢/百度答主中心入口