banq 你好,再请教几个模式

你好,请看看我这样理解对不对,谢谢!
Template:其实就是先定义一个操作的架子,把一些操作延迟到其子类中完成,而不是放在同一个类中,这样当父类变化了,只需要再加一个子类就可以了,其它代码不必修改

Observer:其实就是在执行这个类的代码时,同时触发别一个类的代码被执行,具体是有一个Observer观察者类,这个观察者被加入到要观察的类中,当这个被观察的类的对象发生变化时,观察者就能自动观察到这个对象发生了变化,同时观察者会进行相应的操作, 其实我觉的这种操作不用这个模式也能实现

Visitor(访问者):这个模式主对针对Collection类设计的,为了不使访问Collection类中的元素使用多重if else来判断其类型(因为Collection中的元素可能有多种类型),才使用些模式,具体是对要访问的类型做一下封装,让程序能够对这个类型进行访问,这是被访问者,另外还有访问者Visitor,访问者定义了对每个类型进行访问的接口,其实现可以有多个,这样可以不用多个IF ELSE判断了,因为其元素已经可访问了,直接访问就行。

提问:JdbcTemplate,HibernateTemplate是不是此模式的应用,这个模式中父类是不是就是一个Template类,比如你举例中Benchmark类?

>这样当父类变化了,只需要再加一个子类就可以了
父类不能变化,是模板实现细节(需求)变化了,那么增加子类就可以。JdbcTemplate,HibernateTemplate是模板模式。

>观察者, 其实我觉的这种操作不用这个模式也能实现
敢于思考就非常好,观察者模式是将微观和宏观一种通讯方式进行了总结,模式不是用来实现功能的,这也是很多人误用模式一个地方,模式是一种总结,以便下次碰到相关场景,快速使用到成熟的解决方案,模式是一个解决方案。

你觉得这种操作不用模式也能实现,只是可能看到多线程的一种实现,一个线程抛出另外一个线程,如果将多线程作为解决方案,就范眼界狭小的毛病,这是很多有经验的程序员老毛病,在JavaEE架构中,线程已经非常底层,是非常细节,很多功能需要一个宏观考虑(灵活性、可伸缩性等)。

上升为观察者模式,我们就可以以解决方案替代具体细节,就象以接口替代具体实现子类,我们自己的程序设计也需要抽象,也要象我们用的Java工具一样,有接口抽象设计概念,模式就是这样的。

>Visitor为了不使访问Collection类中的元素使用多重if else来判断其类型(因为Collection中的元素可能有多种类型),才使用些模式。
不能这么说,不是为了避免if else,在模式设计中,由于使用了对象概念,if else的消灭是一个副作用,也就是模式使用的一个衍生品,为了消灭if else而消灭,会陷入死胡同。

访问者是为了在不改变集合中对象(否则破坏封装)前提下,由访问者自己定义对这些对象访问行文,也就是调用行为,访问者和IOC或DI一样,都是解决一种调用关系的。

>父类不能变化,是模板实现细节(需求)变化了,那么增加子类就可以。JdbcTemplate,HibernateTemplate是模板模式。
模板实现细节(需求)变化了:这个实现细节具体指哪个类中的方法?
JdbcTemplate,HibernateTemplate应该是指父类吧(也就是定义操作架子的类)?
>观察者, 其实我觉的这种操作不用这个模式也能实现
我没有用多线程,我想串行调用,就是在setPrice时,调用观察者代码,只是这样可能体现不了并行

JdbcTemplate,HibernateTemplate中定义的抽象方法内容可能发生变化。