模式的学习笔记

模式的学习笔记

 

1、适配器模式 
a、经典的接口对象方式,java不支持的多继承方式
b、在Eclipse中IAdaptable方式
c、在Eclipse中IAdapterFactory并不是单独存在的,而是有一个IAdapterManager对它进行维护的
   IAdapterFactory:public Object getAdapter(Object adapter,Class clazz);
   IAdapterManager:public Object getAdapter(Object adapter,Class clazz);
        public boolean registerAdapters (Class clazz,IAdaptableFactory factory);
d、JUnit3中通过反射实现把testXXX方法适配成runTest执行
e、JUnit4通过标签可以更灵活了

2、单例模式、多线程编程
a、静态的实现、双重锁的实现等传统意义的JVM级别单例
b、Mina的IOFilter、Spring的Service、Struts2的拦截器、Struts1的Action等容器生命周期的只有一个实例的情况,用于多线程访问,这些当前大多见到的并不是实现上的单例,而是思想上,使用于多线程的单例。

3、链式模式
a、常见的web容器的Filter(针对http请求或响应进行处理的链),doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
b、Struts2的拦截器(针对Action的上下文场景处理的链),String intercept(ActionInvocation invocation)
c、Mina的IoFilter,结合了虚拟代理的链式处理结构,一直把链延续到IoHandle,IoHandle是真正实际上的链尾。链类中设置了请求(实际看代码更贴近于请求的异步长连接通道)处理期间各个状态的处理方法。
d、Axis2的拦截器,直接就叫handles

4、外观模式
a、像GuiRunner把Keyword集中在一起提供是不错的选择,也许更像代理;再如mockito
b、其实把所有的Util集中在一个包,一个工程里也是挺清晰的方式
c、总之,做完一切事情之后,给用户提供一个统一的访问门面对产品的易用性会有令人惊喜的提高。

5、工厂模式
a、太多了,简单工厂,工厂方法,抽象工厂,静态工厂
b、像IAdapterFactory这样的,和IAdapterManager一起使用。
c、工厂是存放框架的地方。工厂需要大量冗长重复的代码。工厂往往会让程序员(和读者)很痛苦,他们甚至会嫌它麻烦而放弃编写。Guice 和其他 DI 框架可作为 “超级工厂”,可以通过配置它们来构建对象。配置 DI 框架比自己编写工厂容易得多。因此,程序员编写的代码大部分是 DI 样式的。测试越多代码就越好,程序员以后也就越省事。

6、装饰者模式
a、最经典的应用就是java IO包的设计

7、组合模式,标准的要配合迭代器使用
a、插件开发中的各种树结构
b、eclipse工程本身IProject及其IResource体系(IFile,IFolder),部分自成组合模式

8、命令模式
a、EMF的右键菜单Action,直接被封装成Command,直接支持redo,undo了,并且也容易封装组合操作。比较厉害的是这些Commond被复杂用于编辑器状态等,通过Commond的包装连编辑器内容何时需要保存都不需要关注了。
b、模式本身的效果是把请求方(TestCase开发)和调用方(JUnit框架)解耦

9、状态模式
a、UAP倒是有不少状态机,是C代码的

10、观察者模式
a、到处都是,如各种事件、监听等

11、中介者模式
a、我认为中间件本身就是中介者的精神体现
b、MVC中的C
c、减少耦合依赖的一种思路

12、动态代理模式
a、可以看作框架级别的模式了,Spring AOP底层实现就是利用这种方式。而动态代理只能代理纯java接口,所以Spring AOP也就有同样的限制,当然这样也没什么不好。注意AOP与IOC不是一回事,AOP是横切,是从切点增强类的能力,其具体实现即通过动态的Proxy模式,在目标对象的方法调用的前后插入相应的处理代码。IOC是依赖注入,是装配抽象与实现。

98、reActor模式(反应器模式)
a、Java的NIO为reactor模式提供了实现的基础机制,它的Selector当发现某个channel有数据时,会通过SlectorKey来告知我们,在此我们实现事件和handler的绑定。
b、mina就是基于此模式,既有基于NIO的实现,也有其他更高效的实现。
c、TTCN的可选步,也是类似的思想,也支持异步,可以同时处理并发消息。
d、ERLang直接在语言层面提高支持,效率更高。

99、MVC:Model-View-Controller,是一种常见的 UI 架构模式,通过分离 Model(模型)、View(视图)和 Controller(控制器),可以更容易实现易于扩展的 UI。在 Web 应用程序中,Model 指后台返回的数据;View 指需要渲染的页面,通常是 JSP 或者其他模板页面,渲染后的结果通常是 HTML;Controller 指 Web 开发人员编写的处理不同 URL 的控制器(在 Struts 中被称之为 Action),而 MVC 框架本身还有一个前置控制器,用于接收所有的 URL 请求,并根据 URL 地址分发到 Web 开发人员编写的 Controller 中。
重点是C的理解,前端控制器用于接收所有的 URL 请求,并根据 URL 地址分发到 Web 开发人员编写的 Controller 中(所以叫dispatcher分发器),Interepter(struts2)、Action(struts1)作为真正处理控制的入口,作为web上下文和业务领域上下文的中介。从业务领域中生成展示Model,提供到View展示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值