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中模式有的思路也有相似之处,这一个也是在中见加了一个中间层,静态代理也是加了中间层,然后中间层处理。中介者是一个处于众多对象中间,并处理对象之间的联系。本例子是两个人,如果是多个的话,中介者的作用就更明显了。

Java设计模式总汇二(小白也要飞)的更多相关文章

  1. Java设计模式(二) 工厂方法模式

    本文介绍了工厂方法模式的概念,优缺点,实现方式,UML类图,并介绍了工厂方法(未)遵循的OOP原则 原创文章.同步自作者个人博客 http://www.jasongj.com/design_patte ...

  2. Java设计模式(二十一):职责链模式

    职责链模式(Chain Of Responsibility Pattern) 职责链模式(Chain Of Responsibility Pattern):属于对象的行为模式.使多个对象都有机会处理请 ...

  3. Java设计模式(二)抽象工厂模式

    一.场景描述 接<Java设计模式(一)工厂模式>https://www.cnblogs.com/mahongbiao/p/8618970.html 工厂模式有一缺点,就是破坏了类的封闭性 ...

  4. Java设计模式(二)设计模式原则

    学习Java设计模式之前,有必要先了解设计模式原则. 开闭原则 定义 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭 用抽象构建框架,用实现扩展细节 优点:提高软件系统的可复用性及可维护性 C ...

  5. 深入探索Java设计模式(二)之策略模式

    策略设计模式是Java API库中常见的模式之一.这与另一个设计模式(称为状态设计模式)非常相似.本文是在学习完优锐课JAVA架构VIP课程—[框架源码专题]中<学习源码中的优秀设计模式> ...

  6. JAVA设计模式(二)工厂模式

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

  7. Java设计模式学习二

    Java设计思想之单例模式 单例模式(Singleton Pattern)是Java中最常见的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的 ...

  8. JAVA设计模式《二》

    上一篇为大家介绍了一下设计模式中的责任链模式,本篇为大家介绍一下关于设计模式中的单例模式与模板方法模式.单例模式的作用在于,保证应用中某个实例有且只有一个,单例模式又被分为:饱汉模式与饿汉模式,两者的 ...

  9. Java设计模式总汇一

    PS:首先我们要带着问题读文章 什么是设计模式 为什么要用设计模式 使用设计模式有什么好处 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了重用代码.让 ...

随机推荐

  1. Docker + Jenkins 持续部署 ASP.NET Core 项目

    Docker 是个好东西,特别是用它来部署 ASP.NET Core Web 项目的时候,但是仅仅的让程序运行起来远远不能满足我的需求,如果能够像 DaoCloud 提供的持续集成服务那样,检测 gi ...

  2. redis参数配置说明

    参数说明redis.conf 配置项说明如下:1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程  daemonize no2. 当Redis以守护进程方式运行 ...

  3. 自学WPF之XAML(二)控件

    摘自<深入浅出WPF>. 在WPF中是数据驱动UI,数据是核心,是主动的,UI从属于数据,并表达数据,是被动的.UI是展示给用户操作的.响应UI操作的元素是控件(control).下面是我 ...

  4. Python学习日记:day4

    列表 li=['alex',[1,2,3] ,'wusir','egon','女神','taibai']#列表 l1 = li[0] print(l1)#alex l2 = li[1] print ( ...

  5. 关于《ASP.NET MVC企业级实战》

    大家好,我的书<ASP.NET MVC企业级实战>已经出版啦,感谢大家过去的关注与支持!前言部分,出版的时候漏了部分内容,我这里将其贴出来. 本书提供源码和教学PPT课件!(源码在书中第3 ...

  6. 通过SQL创建一个有主键自动递增有默认值不为空有注释的表

    -- create database db_std_mgr_sys; use db_std_mgr_sys; create table student( std_id bigint not null ...

  7. VMware的一些总结

    一.虚拟主机联网的三种方式: 1.仅主机(Host Only),虚拟主机只能与宿主机联网通信,无法访问外网和宿主机所在局域网的其它主机. 2.桥接(Bridge),在桥接模式下,虚拟主机就像是宿主机所 ...

  8. 最长回文子序列(LPS)

    问题描述: 回文是正序与逆序相同的非空字符串,例如"civic"."racecar"都是回文串.任意单个字符的回文是其本身. 求最长回文子序列要求在给定的字符串 ...

  9. MySQL数据库 Event 定时执行任务.

    一.背景 由于项目的业务是不断往前跑的,所以难免数据库的表的量会越来越庞大,不断的挤占硬盘空间.即使再大的空间也支撑不起业务的增长,所以定期删除不必要的数据是很有必要的.在我们项目中由于不清理数据,一 ...

  10. stack 的优势 - 每天5分钟玩转 Docker 容器技术(113)

    stack 将应用所包含的 service,依赖的 secret.voluem 等资源,以及它们之间的关系定义在一个 YAML 文件中.相比较手工执行命令或是脚本,stack 有明显的优势. YAML ...