论坛首页 入门技术论坛

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

浏览 17100 次
该帖已经被评为新手帖
作者 正文
   发表时间:2008-11-12  
    学习设计模式已经有一段时间了,但经常还是会很困惑。看书上的代码会发现很多不同的设计模式的代码结构非常相似。比如 Bridge 和 Strategy 。。。

     既然是一个讨论贴,那我就先抛砖引玉,希望各位牛人赐教。。

    
     设计模式就是我们设计过程中经常出现的一些相同的情景的解决方案。它也严格遵循设计原则,几乎所有的设计模式都遵循封装变化的原则,个人觉得GOF队设计模式的分类也是根据封装变化的不同来进行的分类,创建型模式封装的是对象的创建的变化,结构型模式封装的是结构的变化,而行为型模式封装的是行为的变化。
     
      对于每个具体的模式区别则在于意图,看到网上有很多人写工厂方法模式和抽象工厂模式的区别,水平参差不齐,有的直接就从树上拷段代码,然后对着代码的结构来分析两者的区别。这样的分析对于初学而又迷惑的人来说非常的不好。

     我这只是个水帖,希望大家多来点口水,不要吝惜。。。。
   发表时间:2008-11-12  
没有学习过模式的设计人员飘过!
0 请登录后投票
   发表时间:2008-11-12  
jdon论坛上有几乎所有模式的解释。可以参考。
0 请登录后投票
   发表时间:2008-11-12  
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.
0 请登录后投票
   发表时间:2008-11-12  
tianmo2008 写道
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.



最简单的一个实例:
我有一个对象A,开始要调用该对象3个方法
A.a(int ,str);
A.b(str,bool);
A.c(str,str);
同时要求该对象是单例的。
好,我怎么作才能清晰的让我的调用者从1000个相关方法中找到我需要调用的这3个初始化时需要的参数,按照我需要的顺序,以单例的模式获取该实例?
这是一个工厂最简单普遍的用法,他可以按照你定制的装配逻辑生产产品。
0 请登录后投票
   发表时间:2008-11-12  
tianmo2008 写道
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.

工厂方法,使得对象的创建和使用者分离,封装了对象创建的变化。当你的对象创建有变化时,你只需要更改工厂方法,而不需要在你的代码中到处去修改new。
1 请登录后投票
   发表时间:2008-11-12  
rainerWJY 写道
jdon论坛上有几乎所有模式的解释。可以参考。

对于设计模式的解释,到处都有,不一定要在jdon上。
这里的讨论是大家交流,难道有了所谓的标准答案,大家只需学习拿来主义就好了??
0 请登录后投票
   发表时间:2008-11-12  
书看了有两遍,感觉还是很肤浅。
我直到项目开发,才体会到设计模式的用途,感觉看书看不出什么来。
0 请登录后投票
   发表时间:2008-11-12  
sea7 写道
tianmo2008 写道
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.

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


概念挺熟的。有多少人开发的时候就知道用什么模式呢?都是重构出来的。代码敲多了,就知道哪里重复太多了,修改就变得自然而然了。
0 请登录后投票
   发表时间:2008-11-12  
Ivan_Pig 写道
sea7 写道
tianmo2008 写道
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.

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


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


开发中尝到甜处了,嘿嘿

只有对设计模式了熟于心,才会恰当的用。
1 请登录后投票
论坛首页 入门技术版

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