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

南京金九建设集团网站手机怎么自己制作图片

南京金九建设集团网站,手机怎么自己制作图片,制作头像,网站的icp备案说明:本文介绍行为型设计模式之一的中介者模式 定义 中介者模式(Mediator Pattern)又叫作调节者模式或调停者模式。用一个中介对象封装一系列对象交互,中介者使各对象不需要显式地互相作用,从而使其耦合松散&#xf…

说明:本文介绍行为型设计模式之一的中介者模式

定义

中介者模式(Mediator Pattern)又叫作调节者模式或调停者模式。用一个中介对象封装一系列对象交互,中介者使各对象不需要显式地互相作用,从而使其耦合松散,而且可以独立地改变它们之间的交互,属于行为型设计模式。

(引自《设计模式就该这样学》P376)

中介者模式简单来说,就是引入中间层,让多对多关系,转为多个一对多关系,图示如下:

(多对多场景)

在这里插入图片描述

(引入中间层,转为多个一对多)

在这里插入图片描述

这样符合迪米特法则(指一个软件实体应当尽可能少地与其他实体发生相互作用),这样,当一个模块修改时,就会尽量少地影响其他的模块。

通讯交友

以两人通讯为例,如下,

(用户类,User)

/*** 用户类*/
public class User {/*** 自己的名字*/private String name;/*** 定义通话对方*/private User friend;public User(String name) {this.name = name;}public String getName() {return name;}/*** 建立连接*/public void connect(User friend) {this.friend = friend;}/*** 说话* 我方说话,调用对方的listen方法*/public void talk(String msg) {friend.listen(msg);}/*** 接听*/private void listen(String msg) {System.out.println(friend.name + " 对 " + name + " 说:" + msg);}
}

(客户端使用,进行聊天)

public class Client {public static void main(String[] args) {User zhangsan = new User("zhangsan");User lisi = new User("lisi");zhangsan.connect(lisi);lisi.connect(zhangsan);zhangsan.talk("hello,四哥,我是三哥啊,您最近挺好的啊?");lisi.talk("哦,三哥啊,我以为谁呢,我挺好的,您呢?");}
}

开始通话

在这里插入图片描述

现在只有两个人,这种设计看起来没有问题,但如果有十个人,开一场多人会议,就要在对象内维护一个User集合,而会议人数新增或减少时,要同时改动每个对象中的User集合,这非常繁琐还容易出问题。

聊天室

基于上面代码的问题,我们引入一个中间层(聊天室),如下:

(用户类,User,定义一个所属聊天室)

/*** 用户类*/
public class User {/*** 自己的名字*/private String name;/*** 所属聊天室*/private Chatroom chatRoom;public User(String name) {this.name = name;}public String getName() {return name;}/*** 加入群聊*/public void login(Chatroom chatRoom) {this.chatRoom = chatRoom;chatRoom.register(this);}/*** 群内发言*/public void talk(String msg) {chatRoom.sendMsg(this, msg);}/*** 接收消息*/public void listen(User fromUser, String msg) {System.out.println("【" + this.name + "】的聊天框 【" + fromUser.getName()  + "】说:" + msg);}
}

(聊天室,用来管理群成员,发消息等操作)

import java.util.ArrayList;
import java.util.List;/*** 聊天室*/
public class Chatroom {/*** 群名称*/private String name;public Chatroom(String name) {this.name = name;}/*** 群内好友*/private List<User> users = new ArrayList<>();/*** 好友加入群聊*/public void register(User user) {this.users.add(user);System.out.println("【系统消息】" + user.getName() + "进入群聊");}/*** 群内发消息*/public void sendMsg(User fromUser, String msg) {users.stream().forEach(user -> user.listen(fromUser, msg));System.out.println("-------------------------------------------------");}
}

(客户端测试,Client)

public class Client {public static void main(String[] args) {// 创建群,好友Chatroom chatroom = new Chatroom("各位IT界的大佬们");User zhangsan = new User("zhangsan");User lisi = new User("lisi");User wangwu = new User("王五");// 好友加入群聊zhangsan.login(chatroom);lisi.login(chatroom);// 发消息zhangsan.talk("hello,四哥,群里就你一个人啊");lisi.talk("是啊,把五哥拉进来");// 拉人进群wangwu.login(chatroom);// 发消息zhangsan.talk("哇,五哥来了");wangwu.talk("哥几个,怎么说");}
}

怎么样,这样设计是不是好多了,结构一下就稳定了,无论群成员增加还是减少,现有代码都不用改动。

在这里插入图片描述

使用场景

在《设计模式就该这样学》(P378)这本书中,提到状态模式适用于以下场景:

(1)系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解。

(2)交互的公共行为,如果需要改变行为,则可以增加新的中介者类。

中介者模式,在Java三层结构开发中就有体现,Service层不会直接访问数据库,而是抽出DAO层,使用DAO对象访问数据库,就是中介者模式的一种体现,还有Spring IOC容器也是,将Bean的创建使用抽离出来统一管理。

还有,有时我们业务中,有种业务场景,没有与之对应的实体(像User对应UserService、UserDAO),而是业务逻辑中产生的对象,如CheckService(检查服务,根据日志表、用户表,检查用户状态是否正常),我们不直接在UserService里实现,而是抽出一个CheckService,这也是中介者模式的一种实现。

总结

本文介绍了行为型设计模式中的中介者模式,参考《设计模式就该这样学》、《秒懂设计模式》两书,通讯交友、聊天室场景是《秒懂设计模式》中的举例。


文章转载自:

http://N22e6UdX.sqqhd.cn
http://UPoSuua7.sqqhd.cn
http://BGyTSuMW.sqqhd.cn
http://UZqn6xHe.sqqhd.cn
http://HsfkbNZH.sqqhd.cn
http://1mwzs5Uv.sqqhd.cn
http://qzdcvxiY.sqqhd.cn
http://q4HagQ8L.sqqhd.cn
http://0LNIhjXJ.sqqhd.cn
http://nPW5YCoZ.sqqhd.cn
http://m7H2BcnH.sqqhd.cn
http://iE1P49Jx.sqqhd.cn
http://wvTNKqNK.sqqhd.cn
http://QAEZMoKn.sqqhd.cn
http://RPFprx42.sqqhd.cn
http://yb9dpQVH.sqqhd.cn
http://mlI9rUId.sqqhd.cn
http://ukZuXJHB.sqqhd.cn
http://rXD9jjDd.sqqhd.cn
http://nSGvkO1c.sqqhd.cn
http://psynbDgL.sqqhd.cn
http://07YF6uPd.sqqhd.cn
http://cWy8Bcoj.sqqhd.cn
http://xB3Ts8F4.sqqhd.cn
http://sPZYzVCX.sqqhd.cn
http://2opca4dd.sqqhd.cn
http://OC6gkTBb.sqqhd.cn
http://nm84YOwy.sqqhd.cn
http://yjwdoK4j.sqqhd.cn
http://fnDszGV9.sqqhd.cn
http://www.dtcms.com/wzjs/741632.html

相关文章:

  • app手机网站网站怎么挖掘关键词
  • 建立网站有什么好处网站网络建设
  • 淘宝上可以做网站吗网站空间的管理站点
  • 株洲网站开发公司wordpress对seo
  • 住房及城乡建设部信息中心网站wordpress 书架
  • 全球最大购物网站跳转网站怎么做的
  • 平凉建设局网站哈尔滨市建设工程信息网查询
  • 温州网站排名优化公司哪家好专业的猎头公司
  • 网站网页制作企宁波seo公司推荐
  • 制作图网 专业图片在线制作网站广西旅游网站建设
  • 海口智能建站详情游戏网页设计html代码大全
  • 网站做多长时间才会有流量温州市建设厅网站首页
  • 网站移动端开发公司怎么让人搜索到自己做的网站
  • 十九届六中全会论坛seo设置
  • 龙岗同乐社区做网站住建部网站建设部
  • 介绍化工项目建设和招聘的网站什么是seo和sem有什么区别
  • 自己创做网站北京健康宝优化
  • 旅行社英文模板网站谷歌seo采集
  • 网站制作时如何在百度上投放广告
  • 贵州铁路投资建设网站网络管理服务器
  • 南宁网络建站网站如何做百度推广方案
  • 邯郸推广网站建设哪个好模板网站也可以做优化
  • 北京教育云平台网站建设wordpress后台入口
  • 网站统计如何做如何为网站添加谷歌分析工具
  • 动态海报网站免费做漫画网站
  • 代做淘宝客网站广州高端网站设计公司排名
  • 常熟做公司网站个人主页源码下载
  • 网站开发职业前景评估网站建设化妆品的目录
  • 全国交通建设网官方网站磁力搜索
  • 网站统计开放平台世界工厂网怎么拿货