模式和重构 - 学习心得
策略模式:
JUNIT spring ECLIPSE 的插件都是 策略模式;
模板模式:
为什么doget 能被调用,而doput 不会被调用,因为在service 内有IF ELSE 来控制
组合模式:
处理树形结构比较合适
组合模式不应该出现递归方法,因为递归需要有退出的判断条件。
组合模式一定有个公共的实现接口
树有两类节点;中间NODE 和 LEAF 两种节点。
如果是容器类(NODE类)的组件,就遍历自己的LIST ;
如果是非容器(叶子)的组件,就直接打印自己的
典型的例子:JUNIT 的 TestCase和 TestSuit 组合模式。
观察者模式、组合模式 都有关键代码:LIST
装饰模式,构造函数会把其它实例传递进来。
在构造的时候传个和他一样的示例进来;
装饰模式
可以不断的去嵌套,装饰模式在运行的时候才知道是谁去装饰谁。
理解:装饰就是补充的扩展处理
典型的例子:早期的JAVA 容器 是非线程安全的,所以可以通过修饰器来包装下容器,将它变成线程安全的。
装饰者模式 和 适配器模式很像;
其实很多设计模式很像;但是不同的模式他的作用是不同的,为了解决不同的问题。
观察者模式和组合模式的比较
观察者模式:通知别人;
组合模式:都是同样的接口;
spring的模式
依赖注入:依赖的对象不用关心,可通过框架来帮开发者注入
依赖注入怎么实现:
(1)通过配置文件,配置实现的类类名;
(2)再进一步,原来由开发者写工厂来做,现在交给容器来做,而不是应用程序来做。
spring的类都是单例模式的,通过beanMap来保证单例。
其实spring的容器本质上就是个map
spring 的mvc:不需要写这么多servlet,是怎么实现的?
核心的原理就是:
有个全局的servlet获取url 和参数,然后把url和参数传递给对应的方法来做。
只要把URL 对应到具体的方法。
案例分析:
大数据领域最著名的是HIVE
HIVE 可以将SQL 转 成 HADOOP的MAPREDUCE 来执行,就不需要人为来处理了。如果人工来写,就比较麻烦。HIVE需要将SQL 写成 HIVEQL
前几年,HADOOP ,
将再ORACLE上跑
SQL 转成 HIVEQL
难点:
(1)语法转换:SQL->HIVEQL
(2)转后语法,要变成HIVE能支撑
原则:
单一职责原则;
每个结构交给具体的类去处理;
将复杂变简单;
增加新功能原来的代码不去动它,新增新的类就行了,所以采用开闭原则
怎么使用模式:
遇到了什么问题?什么模式适合解决这个问题。
根本:模式设计还是要应用到具体的方案中。
典型的例子:
JUNIT的设计者就是 设计模式的编写者之一。
所以JUNIT中的设计模式使用的比较多。
是个典型的设计模式的产品。
评论