PS:上一篇我介绍了适配器设计模式、单例设计模式、静态代理设计模式、简单工厂设计模式,如果没有看过第一篇的小火鸡可以点这个看看http://www.cnblogs.com/cmusketeer/p/8146510.html。这篇介绍一下

  1. MVC设计模式

  2. 中介者设计模式

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、中介者设计模式相关推荐

  1. 设计模式(二)23种设计模式

    设计模式(二)23种设计模式 文章目录 设计模式(二)23种设计模式 组件协作模式 策略模式 观察者模式 单一职责模式 Decorator模式 Bridge模式 对象创建模式 Factory Meth ...

  2. Java设计模式(二)创建型设计模式

    文章目录 三 创建型设计模式 3.1 单例设计模式 3.1.1 饿汉式(线程安全) 3.1.2 懒汉式(线程不安全) 3.1.3 优缺点 3.1.4 补充 3.1.5 框架中的使用 3.1.4.1 S ...

  3. 设计模式总结篇(为什么要学习设计模式,学习设计模式的好处)

    版权声明:转载必须注明本文转自晓_晨的博客:http://blog.csdn.net/niunai112 在学习完设计模式后,LZ想告诉大家: 对于一名工作不久的程序员来说,学习设计模式是非常有必要的 ...

  4. Java代码设计模式讲解二十三种设计模式

    设计模式 文章目录 设计模式 一.创造型设计模式 1.1 单例模式 1.1.1 饿汉式单例模式 1.1.2 懒汉式单例模式 (1)线程不安全的情况 (2)线程安全的情况 1. 实例化的方法上加sync ...

  5. 中介者模式 调停者 Mediator 行为型 设计模式(二十一)

    中介者模式(Mediator) 调度.调停 意图 用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散 而且可以独立地改变它们之间的交互. 中介者模式又 ...

  6. Java设计模式(16)中介模式(Mediator模式)

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  7. 【每天一个java设计模式(二十三)】 - 访问者模式

    在访问者模式中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元素对象已接受访问者对象,这样访问者 ...

  8. Java设计模式(二):UML 类图和概述

    目录 一·UML类图 1.1 UML 基本介绍 1.2 UML 图 1.3 UML 类图 1.4 类图-依赖关系 ( Dependence) 1.5 类图-泛化关系(generalization) 1 ...

  9. java 设计模式 示例_Java中的中介器设计模式-示例教程

    java 设计模式 示例 中介者模式是行为设计模式之一 ,因此它处理对象的行为. 中介器设计模式用于在系统中不同对象之间提供集中式通信介质. 根据GoF,中介者模式意图是: 通过封装不同对象集相互交互 ...

最新文章

  1. 论文不必参考任何文献?看到作者,网友大呼失敬了
  2. iOS-生成国际化包-配置App多语言支持
  3. springcloud 与springboot的依赖关系以及版本的选择
  4. Vue监控器watch的全面解析
  5. jpa in查询_优选在shopee虾皮怎么发货价格查询皮皮虾云仓
  6. IDA笔记-IDA Pro基本使用
  7. 【SQL】SQL语法树
  8. Vue 从零开始搭建PC端项目完整框架(附GitHub地址和Vue项目执行流程)
  9. 30A的MOS现在价格都下探到1块了,为什么你还在用继电器?
  10. 导数的四则运算法则_浅谈学习高数的导数有关内容
  11. 从零开始开发一个全栈Web应用实录
  12. 怎样把d盘改成c盘!如何把收藏夹和桌面的路径设成D盘
  13. [数据分析笔记] 网易云歌单分析系列02—pyecharts柱状图
  14. requests爬取视频片段并整合
  15. 细胞膜杂化脂质体载紫杉醇/红细胞膜包被雷公藤甲素-红素仿生共载脂质体的研究制备
  16. 找到一个在线网站截图的网站
  17. NBU备份之效率提升
  18. layui标签页切换并自动刷新
  19. AOE图,最早活动时间最晚活动时间,关键路径关键节点
  20. BIT2022年春软件需求工程和UML建模 - 智慧校园数据管理系统 - Week_1

热门文章

  1. python dataframe索引转成列_Pandas之DataFrame对象的列和索引之间的转化
  2. 反射 数据类型_Java基础:反射机制详解
  3. java 离散算法_用JAVA语言实现离散数学算法
  4. 自动化测试和测试开发的区别?培训学哪个更好?
  5. 一文带你领略JS中原型链的精妙设计
  6. python的pip换源_[Python]Pip换源以及设置代理
  7. 中专计算机应用完整教学计划,中职生教学计划
  8. ldconfig 和 ldd 命令用法
  9. js 对象数组和对象的使用
  10. Linux学习笔记---移植官方linux步骤(二)