天天看点

设计模式

  以前做项目的时候并没有想过用过采用什么样的设计模式进行开发。唯一用过的模式也就是mvc的开发模式了。但是当初对mvc模式理解的也是很片面。为了提高程序的运行效率,或者是对程序进行更进一步的优化,合理的设计模式是十分重要的。

  

设计模式

 来自百度百科

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级了,先复习...