这个框架是一个 实现非常精简MVC 框架 ,适用于 C/S 结构的程序。
框架的核心类有
Controller
View
Modle
Controller 中包含对View的引用 并且包含对 Map<String,Command>
String 是通知 类型的名字 ,Command 是对应的 命令操作
View 中有一个 Map<String,List<Command>>; Map<String ,Mediator>
Mediator 和 相应的 Command 都在 View 中注册,Mediator 用于管理 View 与视图之间的复杂性 ,其实 Mediator 可以直接注册在 Controller 中 ,View 的作用是
让 Mediator 和 Controller 解耦,。
Modle 则负责管理Proxy ,目的是 让 Command 与 Proxy 解耦
Command 的接受者其实就是 Proxy ,利用 Proxy 的逻辑来完成处理 。
Observer 模式 在这里 实现为 一个 Observer 需要定义 Ifunction 对象 来处理响应, Notifaction 定义传输的消息类型 ,Notifer 则是通知的发出者,用来通知各路观察者
是通过 facade 的 notifyObservers 方法, 而Observers 方法 有两个注册途径 一是在Controller 中注册Command ,另外就是 在View中注册Medaitor 。
Proxy 作为代理类 处理各种业务逻辑,可以进行访问控制? private Object data = null 这个属性我想是不是定义一个被代理类型的对象呢??
Facade 的应用 , Singleton 的应用 ,注意是多线程模式下, 实现方法是 同步了 静态方法 ,相当于在 class 对象上加锁了。
总的来说
IProxy ,Command ,Modle三个类实现了Notifier 接口 ,可以实现通知机制 , 在Controller 中实现了注册命令的功能,在View 中实现了注册Mediator 的功能, 在与组件交互上,Mediator 实现了 各种显示页面的可变性。
实际应用流程如下,
实现 Mediator 接口 , 在 Controller 中注册 关注的事件, 在 用户界面中事件出发 通过Model 交给 Proxy 处理 结果返回,并发出结果通知事件,来通知View 选择 适当的 Mediator 来显示组件。
个人猜想 Struts 应该也是类似的架构,不过应该复杂很多 ,所以 以后再分析 struts
。
上面利用了模式
1.单例
2.门面
3.命令
4.代理
5.中介者
6.观察者
其中
单例 是为了保证框架只有一个入口
门面 是将整个系统功能整理处理 并提供一个小接口的API
命令 实现Controller 与 处理逻辑的 解耦, 与 WEB MVC 中的 前端控制器一个意思 Struts 本就是可以实现 事件定义者 和处理者 解耦,命令模式 就是把接受者和处理逻辑放在Command里面 Command一般实现 execute 并在适当的时候被调用。
代理 实现了多业务逻辑的处理,并可以实现访问控制
中介者 中介者模式实现了 对显示组件一View 之间复杂关系的解耦
观察者 实现了通知机制,使得在 View 中注册的各种 观察者得到通知。