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,描述.
(2)视图层 View
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;
}
}
* View层
UsersView.java package mvcmoshi;
/***/
* 显示用户信息
(3) 控制层
* */
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);
}
}
}/
* 控制层 主要是写对View和Model的更新控制
package mvcmoshi;
import mvcmoshi.Users;
/**
* 更新方法 针对view中的方法
* */
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();
}
/ * *
这里写 set 和 get 方法,是因为控制层是更新数据一层,可以看出就算是在 Controller 里 set 和 get,但对象依然是 Users,在 model(Users)类中取出数据在 View 中显示出来,这才是 Controller 做的事.上面什么都有了,那就开始测试一下吧,随便写一个带有 main 方法的类即可
* /
public void updateView() {
userView.showView(users.getName(), users.getAge(), users.isVip(), users.getDescribe());
}
}/
(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;
}
/ * **
(2)创建 人 类
* /
public void showMessage(User user, String message) {
System.out.println(getNowDate() + "<" + user.getName() + ">:" + message);
}
}/
(3)测试
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);
}
}
效果图
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