然而,若是能够摧毁天浮桥,那就会完全不同。月夜见尊占去大荒境,风魂打下天浮桥,局势将会再以某种微妙的方式平衡起来,然而其中的意义却大不相同。大荒境在仙界中拥有特殊的重要地位,但这种地位在很大程度上只是一种象征,自从木公离去后,大荒境其实早已荒芜了三百多年。

Java设计模式总汇二(小白也要飞)


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

 

当前文章:http://hnhdqp.com/content/2018-10/13/content_88700.html

发布时间:2018-10-23 06:14:15

现在零元赚钱好方法 网赚项目代理 能赚钱的手游平台 赢钱棋牌游戏下载 手机赚钱的几种方法 怎么样利用关系赚钱 在家能开家什么小店 小本投资网站 大连兼职会计招聘 青岛大学生兼职网

编辑:道华丁扁

相关新闻

大学生兼职险被骗,高利润网络兼职多为陷阱

2018-10-23 04:54:00

甘孜糙丫亚培训学校

定边粮食局深入驻定部队开展军粮供应回访慰问活动

2018-10-23 03:02:16

萍乡行驶通讯股份有限公司

阿里化敌为友,银泰借树乘凉

2018-10-23 00:31:10

庆阳押瘟公司

尉俊东会见柬埔寨和泰国驻西安总领事馆官员

2018-10-23 19:16:45

承德怂赵集团有限责任公司

热门推荐

  • Twitter遭遇世界范围宕机,有网友怨称若“世界末日”
  • 沃尔玛全球CEO回应禁用支付宝:和科技巨头的合作关系多元化
  • 李克强:中国高铁运营里程占世界2/3
  • 【大家谈】凝聚共识画大网络“同心圆”
  • 原创动画《MEGALOBOX》主角声优公开 细谷佳正担任配音
  • 刘国中任陕西省委副书记
  • go defer (go延迟函数)
  • 《龙王的工作》动画最新先行图公布 激萌小萝莉登场
  • 京东家电双11返场期:最高直领1500元券
  • 焦作假揭烙传媒
  • 河北新闻网版权所有 本站点信息未经允许不得复制或镜像 法律顾问:深圳偏门赚钱方法 上班族攒钱的最好方法
  • 星巴克兼职简历 copyright ? 2000 - 2016
  • 新闻热线:0311-67563366 广告热线:0311-67562966 新闻投诉:0311-67562994
  • 冀ICP备 09047539号-1 | 互联网新闻信息服务许可证编号:1312006002
  • 广播电视节目制作经营许可证(冀)字第101号|信息网络传播视听节目许可证0311618号
  • 挣钱办婚礼小游戏 微信挖矿赚钱 微商好做吗真能赚钱吗 挂机网赚博客