Java设计模式总汇二---MVC、中介者设计模式
PS:上一篇我介绍了适配器设计模式、单例设计模式、静态代理设计模式、简单工厂设计模式,如果没有看过第一篇的小火鸡可以点这个看看http://www.cnblogs.com/cmusketeer/p/8146510.html。这篇介绍一下
MVC设计模式
中介者设计模式
1:MVC设计模式
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。如果做过web项目的话,就会知道一些框架,比如说SSH(SpringMVC+Spring+Hibernate),当然有的这里的SpringMVC也可以是Struts,因为这都是MVC分层的一个框架。在web里的MVC可能比较比较好理解,因为View这个层可以直接显示出来,Controller可以直接用servlet。我们看到的网页端就是一个很好的证明(View)。其实,这个mvc和web的mvc都是一个原理,也可以说就是一种演变。
- Model(模型) - 模型代表一个存取数据的对象,也可以夹杂这一些逻辑,在数据变化时更新控制器。
- View(视图) - 视图代表模型包含的数据的可视化。
- Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
这里我举一个简单的例子--用户(users)升级成为vip后刷新视图重新输入控制台。
(1)Model类--Users.java
该类只写了几个属性和set、get方法。包括名字、年龄、vip、描述。
package mvcmoshi;public class Users {public String name;public int age;public boolean vip;public String describe;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public boolean isVip() {return vip;}public void setVip(boolean vip) {this.vip = vip;}public String getDescribe() {return describe;}public void setDescribe(String describe) {this.describe = describe;}}
(2)视图层View
UsersView.java
package mvcmoshi;
/*** View层* 显示用户信息* */
public class UsersView {public void showView(String name,int age,boolean vip,String describe){System.out.println("用户资料调出");if(vip){System.out.println("姓名:"+name+",年龄:"+age+",身份:尊贵Vip"+",描述:"+describe);}else{System.out.println("姓名:"+name+",年龄:"+age+",身份:平民"+",描述:"+describe);}}
}
(3)控制层
package mvcmoshi;import mvcmoshi.Users;/*** 控制层 主要是写对View和Model的更新控制* */
public class UsersController {public Users users;public UsersView userView;public UsersController(Users user, UsersView view) {this.users = user;this.userView = view;}public void setUsersName(String name) {users.setName(name);}public String getUsersName() {return users.getName();}public void setUsersAge(int age) {users.setAge(age);}public int getUsersAge() {return users.getAge();}public void setVip(boolean vip) {users.setVip(vip);}public boolean getVip() {return users.isVip();}public void setDescribe(String describe) {users.setDescribe(describe);}public String getDescribe() {return users.getDescribe();}/*** 更新方法 针对view中的方法*/public void updateView() {userView.showView(users.getName(), users.getAge(), users.isVip(), users.getDescribe());}
}
这里写set和get方法,是因为控制层是更新数据一层,可以看出就算是在Controller里set和get,但对象依然是Users,在model(Users)类中取出数据在View中显示出来,这才是Controller做的事。上面什么都有了,那就开始测试一下吧,随便写一个带有main方法的类即可
(4)测试
package mvcmoshi;public class MainShow {public static void main(String[] args) {// TODO Auto-generated method stub//对用户进行赋值Users usersModel=new Users();usersModel.setName("张三");usersModel.setAge(23);usersModel.setVip(false);usersModel.setDescribe("此人阴险狡诈,要小心。");UsersView usersView=new UsersView();UsersController usersController=new UsersController(usersModel, usersView);usersController.updateView();//更新数据usersModel.setVip(true);usersModel.setDescribe("此人乃是贵族vip");usersController.updateView();}}
效果图
2:中介者设计模式
定义:中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。
意图:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
主要解决:对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
何时使用:多个类相互耦合,形成了网状结构。
上面就是中介者的定义和使用技能,用通俗的话来解释的话就是多个类直接相互影响的时候,在中间加入一个处理层来管理或者处理一些操作,比如说,QQ聊天的时候,张三和李四聊天,相隔很远,他们只需要把说的话输入手机,对方就可以看到信息,这个手机就是一个中介者。也或者说,在很多人用手机聊天的过程中,两两相关,这就形成了网状结构,这时最好把两个人发送的数据都存在服务器上,然后通过服务器再往各处发放。下面我举一个简单的例子,这个例子很简单,主要是针对这个思想展开,代码就不复杂了。(红色为例子)
(1)创建中介者类
里面有一个是关于格式化时间的方法。
package zhongjiezhe;import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;/*** 中介者 主要是协调各对象(如用户)之间的协作。*/
public class Service {/*** 格式化时间*/public static String getNowDate() {Date currentTime = new Date();SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString = formatter.format(currentTime);return dateString;}/**** 显示消息方法*/public void showMessage(User user, String message) {System.out.println(getNowDate() + "<" + user.getName() + ">:" + message);}
}
(2)创建 人 类
package zhongjiezhe;public class User {private String name;private String message;public String getName() {return name;}public void setName(String name) {this.name = name;}public User(String name) {this.name = name;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public void sendMessage() {Service service = new Service();service.showMessage(this, message);}
}
(3)测试
package zhongjiezhe;public class MainShow {public static void main(String[] args) {User zhangsan=new User("张三");User lisi=new User("李四");zhangsan.setMessage("四哥,你下午有空吗?");lisi.setMessage("三弟呀,我下午有空");zhangsan.sendMessage();lisi.sendMessage();zhangsan.setMessage("那好,你帮我修一下我的电脑");lisi.setMessage("没问题,记得请吃饭呦");zhangsan.sendMessage();lisi.sendMessage(); }
}
效果图
总结:这个中介者模式按简单的说,就是这样的,因为我这个例子简单,所以有的小火鸡们会觉得不这样写也能达到我这个效果图,确实,我只是为了让大家一看就明白,主要是思想。有的时候我们可能一直这样写,但就是不知道这就是中介者模式。23中模式有的思路也有相似之处,这一个也是在中见加了一个中间层,静态代理也是加了中间层,然后中间层处理。中介者是一个处于众多对象中间,并处理对象之间的联系。本例子是两个人,如果是多个的话,中介者的作用就更明显了。
转载于:https://www.cnblogs.com/cmusketeer/p/8270909.html
Java设计模式总汇二---MVC、中介者设计模式相关推荐
- 设计模式(二)23种设计模式
设计模式(二)23种设计模式 文章目录 设计模式(二)23种设计模式 组件协作模式 策略模式 观察者模式 单一职责模式 Decorator模式 Bridge模式 对象创建模式 Factory Meth ...
- Java设计模式(二)创建型设计模式
文章目录 三 创建型设计模式 3.1 单例设计模式 3.1.1 饿汉式(线程安全) 3.1.2 懒汉式(线程不安全) 3.1.3 优缺点 3.1.4 补充 3.1.5 框架中的使用 3.1.4.1 S ...
- 设计模式总结篇(为什么要学习设计模式,学习设计模式的好处)
版权声明:转载必须注明本文转自晓_晨的博客:http://blog.csdn.net/niunai112 在学习完设计模式后,LZ想告诉大家: 对于一名工作不久的程序员来说,学习设计模式是非常有必要的 ...
- Java代码设计模式讲解二十三种设计模式
设计模式 文章目录 设计模式 一.创造型设计模式 1.1 单例模式 1.1.1 饿汉式单例模式 1.1.2 懒汉式单例模式 (1)线程不安全的情况 (2)线程安全的情况 1. 实例化的方法上加sync ...
- 中介者模式 调停者 Mediator 行为型 设计模式(二十一)
中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. 中介者模式又 ...
- Java设计模式(16)中介模式(Mediator模式)
Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...
- 【每天一个java设计模式(二十三)】 - 访问者模式
在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元素对象已接受访问者对象,这样访问者 ...
- Java设计模式(二):UML 类图和概述
目录 一·UML类图 1.1 UML 基本介绍 1.2 UML 图 1.3 UML 类图 1.4 类图-依赖关系 ( Dependence) 1.5 类图-泛化关系(generalization) 1 ...
- java 设计模式 示例_Java中的中介器设计模式-示例教程
java 设计模式 示例 中介者模式是行为设计模式之一 ,因此它处理对象的行为. 中介器设计模式用于在系统中不同对象之间提供集中式通信介质. 根据GoF,中介者模式意图是: 通过封装不同对象集相互交互 ...
最新文章
- 论文不必参考任何文献?看到作者,网友大呼失敬了
- iOS-生成国际化包-配置App多语言支持
- springcloud 与springboot的依赖关系以及版本的选择
- Vue监控器watch的全面解析
- jpa in查询_优选在shopee虾皮怎么发货价格查询皮皮虾云仓
- IDA笔记-IDA Pro基本使用
- 【SQL】SQL语法树
- Vue 从零开始搭建PC端项目完整框架(附GitHub地址和Vue项目执行流程)
- 30A的MOS现在价格都下探到1块了,为什么你还在用继电器?
- 导数的四则运算法则_浅谈学习高数的导数有关内容
- 从零开始开发一个全栈Web应用实录
- 怎样把d盘改成c盘!如何把收藏夹和桌面的路径设成D盘
- [数据分析笔记] 网易云歌单分析系列02—pyecharts柱状图
- requests爬取视频片段并整合
- 细胞膜杂化脂质体载紫杉醇/红细胞膜包被雷公藤甲素-红素仿生共载脂质体的研究制备
- 找到一个在线网站截图的网站
- NBU备份之效率提升
- layui标签页切换并自动刷新
- AOE图,最早活动时间最晚活动时间,关键路径关键节点
- BIT2022年春软件需求工程和UML建模 - 智慧校园数据管理系统 - Week_1
热门文章
- python dataframe索引转成列_Pandas之DataFrame对象的列和索引之间的转化
- 反射 数据类型_Java基础:反射机制详解
- java 离散算法_用JAVA语言实现离散数学算法
- 自动化测试和测试开发的区别?培训学哪个更好?
- 一文带你领略JS中原型链的精妙设计
- python的pip换源_[Python]Pip换源以及设置代理
- 中专计算机应用完整教学计划,中职生教学计划
- ldconfig 和 ldd 命令用法
- js 对象数组和对象的使用
- Linux学习笔记---移植官方linux步骤(二)