以前做项目的时候并没有想过用过采用什么样的设计模式进行开发。唯一用过的模式也就是mvc的开发模式了。但是当初对mvc模式理解的也是很片面。为了提高程序的运行效率,或者是对程序进行更进一步的优化,合理的设计模式是十分重要的。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL4QDM0QjMwQTMx0SO0gDOwMTNyIzNxITM1EDMy0iMzYDM0YzLcJTM1EDMy8CXyMjNwQjNvw1ZvxmYvwVbvNmLzd2bsJmbj5SNxAjMzV2Zh1Wavw1LcpDc0RHaiojIsJye.png)
来自百度百科
mvc 是一种使用 mvc(model view controller 模型-视图-控制器)
model(模型)表示应用程序核心(比如数据库记录列表)。
view(视图)显示数据(数据库记录)。
controller(控制器)处理输入(写入数据库记录)。
mvc 模式同时提供了对 html、css 和 javascript 的完全控制。
(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
其中最典型的mvc就是jsp + servlet + javabean的模式。用javaee做过网站的都知道,structs框架就是采用的mvc的设计模式。
观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的
那些观察者对象,使这些观察者对象能够自动更新。
java观察者模式
1.创建被观察者类,它继承自java.util.observable类;
2.创建观察者类,它实现java.util.observer接口;
3.对于被观察者类,
添加它的观察者:
void addobserver(observer o)
addobserver()方法把观察者对象添加到观察者对象列表中。
当被观察事件发生时,执行:
setchanged();
notifyobservers();
setchange()方法用来设置一个内部标志位注明数据发生了变化;
notifyobservers()方法会去调用观察者对象列表中所有的observer的update()方法,通知它们数据发生了变化。
只有在setchange()被调用后,notifyobservers()才会去调用update()。至于为什么可以看一下下面的源码。
4.对于观察者类,实现observer接口的唯一方法update
void update(observable o, object arg)
形参object arg,对应一个由notifyobservers(object arg);传递来的参数,当执行的是notifyobservers();时,arg为null。
1.生产者充当被观测的对象,生产者可以生产的水果如下。
2.多个消费者充当观察者,每个消费者观察不同的水果生产情况
3.生产者(被观察者)随机生产水果,通知消费者(观察者)进行消费
if(pf.getclass() == producefruit.class) system.out.println(true);
最典型的就是swing框架的jbutton的实现。jbutton继承自abstractbutton,在abstractbutton中维护了一组监听器,它们就扮演者被观察的角色。而abstractbutton本身就是被观察对象。监听器actionlistener并不是依靠循环监听去获取按钮何时被单击,而是当按钮被单击时,通过abstractbutton的fireactionperformed()方法回调actionlistener.actionperformed()方法实现。基于这种结构,在应用程序开发时,只要简单的实现actionlisterner接口(也就是observer),并将其添加到按钮的观察者列表中,那么当单击事件发生就可以自动促发监听器的业务处理函数。
2.以下是abstractbutton中的一段处理代码
写到这里,不得不说一下mvc模式和观察者模式结合的小例子。long long ago,我用c写了一个贪吃蛇的小游戏,没有什么技术含量,当时并没有考虑用什么样的设计模式去写,而是想怎么写就怎么写,最终完成了。我知道这样的写法非常的不好,尤其是出现bug的时候,调试起来是非常的麻烦。基于上面的两个设计模式,看一下“贪吃蛇”新的设计思路。
2.view,并充当观察者
3.controler,将model和view结合起来
最后通过主函数,创建snakecontrol对象就可以是整个程序跑起来了。设计方法很重要,最后就是一步一步的完善了。关于设计模式就先写到这里了,过几天再完善,要考6级了,先复习...