论坛首页 入门技术论坛

[讨论] 如何区别和理解理解设计模式 ?

浏览 17146 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-11-13  
sea7 写道
Ivan_Pig 写道
sea7 写道
tianmo2008 写道
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.

工厂方法,使得对象的创建和使用者分离,封装了对象创建的变化。当你的对象创建有变化时,你只需要更改工厂方法,而不需要在你的代码中到处去修改new。


概念挺熟的。有多少人开发的时候就知道用什么模式呢?都是重构出来的。代码敲多了,就知道哪里重复太多了,修改就变得自然而然了。


开发中尝到甜处了,嘿嘿

只有对设计模式了熟于心,才会恰当的用。

没实际开发的经验,没有几百次的重构,是熟不了那些模式的!
有些人自认为模式很熟,到处用.使得代码没有简单,反而复杂
难懂!
0 请登录后投票
   发表时间:2008-11-13  
    偏题了,发这个贴是希望大家来讨论设计模式的区别与理解,而不是要争论怎样算是掌握设计模式.
0 请登录后投票
   发表时间:2008-11-13   最后修改:2008-11-13
最好的模式是写代码时看不到模式.
所以叫....设计模式....
PS:设计时考虑别人写的代码
在类中new 类 是非常不好定测试的.
0 请登录后投票
   发表时间:2008-11-13  
模式都是重构出来的。
当在代码中发现bad smell的时候,考虑如何去掉这些bad smell,
如果理解了那些面向对象的思想,解耦,封装变化点,去除重复,自然就会在重构的代码中用上相应的模式。
1 请登录后投票
   发表时间:2008-11-13  
<<从重构到模式>>
0 请登录后投票
   发表时间:2008-11-13  
tianmo2008 写道
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.

在理解工厂方法之前,你要知道为什么要使用工厂方法,所以你要理解依赖倒转原则,依赖倒转原则是OO的设计核心,工厂方法设计模式只是依赖倒转思想的一种实现一种表现形式,而要理解依赖倒转原则 你就要去看OO了,这是思路
在遇到问题的时候,多想想为什么而不是你的“感觉没有必要”,
在你控制情绪之前,情绪是你的主人
0 请登录后投票
   发表时间:2008-11-13  
学习模式光看书是没用,我觉得学习模式要在有一定项目经验后,否则是白学的。最好要懂得比较有用模式和没有用模式的代码区别,不要为了模式而用模式。
0 请登录后投票
   发表时间:2008-11-13  
我对模式的感觉:
1.设计模式能给你一个设计的起点,然后随后慢慢根据需要重构出适合你的项目的设计.
2.给了你一个交流的语境.(讨论时候:"恩恩 我觉得这里需要个strategy...")
3.没必要非得死靠这是某某模式,实际使用往往是某几种模式的综合
4.设计模式的核心感觉:封装变化,抽象行为,多用组合:P
0 请登录后投票
   发表时间:2008-11-13  
woods 写道
我对模式的感觉:
1.设计模式能给你一个设计的起点,然后随后慢慢根据需要重构出适合你的项目的设计.
2.给了你一个交流的语境.(讨论时候:"恩恩 我觉得这里需要个strategy...")
3.没必要非得死靠这是某某模式,实际使用往往是某几种模式的综合
4.设计模式的核心感觉:封装变化,抽象行为,多用组合:P


同意
0 请登录后投票
   发表时间:2008-11-13  
tianmo2008 写道
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.


你是没发现工厂用到什么地方,
当然对于ArrayList在代码里你可以到处new,
因为ArrayList的实现是稳定的,不需要你实现一个MyArrayList,
但是有些情况不一样,
比如有个FileLogger,从名字看出它是向文件输出log的实现类,
但你并不能保证你做好的项目以后不会变成向DB输出log,
这时你又实现了DBLogger,这时你发现FileLogger被new到各个地方,
你不得不一个个都替换成DBLogger。
而如果使用工程的话,你只需要修改工厂的实现就可以了,甚至你工厂是读取配置文件得到FileLogger的,
那么你只需要修改配置文件就可以了。

至于接口,你可以找找为什么要面向接口编程,这样做可以给你带来什么。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics