`
sea7
  • 浏览: 5979 次
  • 性别: Icon_minigender_1
  • 来自: 火星
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多
    学习设计模式已经有一段时间了,但经常还是会很困惑。看书上的代码会发现很多不同的设计模式的代码结构非常相似。比如 Bridge 和 Strategy 。。。

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

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

     我这只是个水帖,希望大家多来点口水,不要吝惜。。。。
分享到:
评论
14 楼 repsihWDX 2008-11-13  
<<从重构到模式>>
13 楼 fly_ever 2008-11-13  
模式都是重构出来的。
当在代码中发现bad smell的时候,考虑如何去掉这些bad smell,
如果理解了那些面向对象的思想,解耦,封装变化点,去除重复,自然就会在重构的代码中用上相应的模式。
12 楼 阳光晒晒 2008-11-13  
最好的模式是写代码时看不到模式.
所以叫....设计模式....
PS:设计时考虑别人写的代码
在类中new 类 是非常不好定测试的.
11 楼 sea7 2008-11-13  
    偏题了,发这个贴是希望大家来讨论设计模式的区别与理解,而不是要争论怎样算是掌握设计模式.
10 楼 lqql 2008-11-13  
sea7 写道
Ivan_Pig 写道
sea7 写道
tianmo2008 写道
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.

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


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


开发中尝到甜处了,嘿嘿

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

没实际开发的经验,没有几百次的重构,是熟不了那些模式的!
有些人自认为模式很熟,到处用.使得代码没有简单,反而复杂
难懂!
9 楼 sea7 2008-11-12  
Ivan_Pig 写道
sea7 写道
tianmo2008 写道
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.

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


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


开发中尝到甜处了,嘿嘿

只有对设计模式了熟于心,才会恰当的用。
8 楼 Ivan_Pig 2008-11-12  
sea7 写道
tianmo2008 写道
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.

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


概念挺熟的。有多少人开发的时候就知道用什么模式呢?都是重构出来的。代码敲多了,就知道哪里重复太多了,修改就变得自然而然了。
7 楼 Ivan_Pig 2008-11-12  
书看了有两遍,感觉还是很肤浅。
我直到项目开发,才体会到设计模式的用途,感觉看书看不出什么来。
6 楼 sea7 2008-11-12  
rainerWJY 写道
jdon论坛上有几乎所有模式的解释。可以参考。

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

工厂方法,使得对象的创建和使用者分离,封装了对象创建的变化。当你的对象创建有变化时,你只需要更改工厂方法,而不需要在你的代码中到处去修改new。
4 楼 rainerWJY 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个初始化时需要的参数,按照我需要的顺序,以单例的模式获取该实例?
这是一个工厂最简单普遍的用法,他可以按照你定制的装配逻辑生产产品。
3 楼 tianmo2008 2008-11-12  
这几天看书,工厂方法确实很不好理解,感觉没有必要,我的理解是引进工厂的目的之一是要是要隐藏掉new,但在工厂方法里,实现了工厂接口的具体工厂类自身也是要new的,这样,为什么不直接去new一个产品呢?而且和抽象工厂对比,我觉得工厂方法是定位在一个产品应该对应一个工厂类的,这样的话,没添加一个产品就得有对应的一个工厂,还得new一个工厂,这样还不如直接用产品接口,然后new一个具体产品不是更直观吗?工厂方法和接口感觉不到有什么优势.
2 楼 rainerWJY 2008-11-12  
jdon论坛上有几乎所有模式的解释。可以参考。
1 楼 lqql 2008-11-12  
没有学习过模式的设计人员飘过!

相关推荐

    设计模式(包含5个设计模式)含源代码报告.rar

    这个压缩包文件"设计模式(包含5个设计模式)含源代码报告.rar"显然是一份宝贵的资源,它涵盖了五个核心的设计模式,并附带了详细的类图、源代码以及文档报告,这对于学习和理解设计模式至关重要。 首先,我们要探讨...

    设计模式之蝉

    书中包含了作者的个人读书笔记,这表明除了正文内容之外,作者还提供了自己的理解与见解,这些笔记可能对理解设计模式的精髓与实际应用有很大的帮助。 在内容部分,我们可以看到有关于设计模式的一些具体讨论,例如...

    新版设计模式手册 - C#设计模式(第二版)

    在C#设计模式(第二版)中,作者可能会深入讨论每种模式的动机、结构、参与者、协作方式以及优缺点。同时,书中还会通过实际的C#代码示例来演示如何在项目中应用这些模式,帮助读者理解模式背后的意图和使用场景。 ...

    java 设计模式 英文版

    本文的深入探讨将帮助读者理解设计模式如何在实际编程中发挥作用,通过具体的例子和应用场景来阐述每个模式的用法和价值。通过学习这些设计模式,开发者可以更好地应对复杂的软件设计挑战,写出更加优雅和高效的代码...

    23种设计模式详细介绍与区别

    在提供的文档《设计模式.docx》和图表《设计模式.vsdx》中,你将找到更详尽的解释和示例,帮助你更好地理解和应用这些设计模式。通过阅读和研究这些材料,你可以深入探索每种模式的细节,从而提升你的软件设计能力。

    设计模式可复用面向对象软件的基础(C++)——强烈推荐

    首先,我们需要理解设计模式的基本分类。设计模式通常分为三类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建,如单例模式、工厂模式和建造者模式,它们旨在提供一种灵活的、抽象的对象创建方式。...

    JAVA设计模式-chm版

    4. 参与讨论和分享,与其他开发者交流设计模式的理解和应用。 总之,“JAVA设计模式-chm版”资源对于深入理解并掌握Java设计模式具有很高的价值。通过学习和实践,开发者可以提升自己的编程技能,编写出更加高效、...

    head设计模式+设计模式解析(第二版).rar

    《Head First 设计模式》以其独特的视觉风格和易于理解的方式,为初学者提供了设计模式的入门指南。书中涵盖了23种经典的GOF(GoF,Gang of Four)设计模式,包括创建型模式(如单例模式、工厂模式)、结构型模式...

    设计模式学习总结.doc

    在《设计模式学习总结》中,作者通过自己的学习经历和实际应用,分享了对23种经典设计模式的理解和感悟。这篇文档主要讨论了设计模式的概念、作用、应用以及学习设计模式时应注意的误区。 设计模式起源于面向对象...

    碾磨设计模式.pdf

    设计模式不仅仅是技术上的技巧,更是理解和掌握面向对象设计思想的关键。"研磨设计模式"通过实例解析,帮助读者理解这些模式如何在实际项目中应用,从而提升软件设计能力。通过阅读和实践这些模式,开发者可以更好地...

    java设计模式PPT

    首先,我们要理解设计模式的核心概念。设计模式不是代码,而是解决软件设计中反复出现的问题的模板或指南。它们提供了一种标准的解决方案,帮助开发者在面对复杂性时保持代码的可读性、可维护性和可扩展性。在JAVA中...

    设计模式 (20种设计模式代码详解)

    这些设计模式的代码实现将帮助读者更直观地理解和应用它们。记住,设计模式并非银弹,而是工具,理解其背后的意图和应用场景至关重要。在实际开发中,灵活地组合和运用设计模式,可以使代码更加健壮、可维护,提高...

    设计模式-王翔 全本

    这不仅有助于个人技能的提升,也有利于团队间的沟通和协作,因为设计模式提供了一种共同的语言和理解基础。通过掌握设计模式,开发者能够在面对复杂系统设计时更加游刃有余,更好地应对软件开发中的挑战。

    设计模式大全C++.rar

    这本书可能会深入讨论C#中的特性如何与设计模式结合,比如接口和泛型如何支持策略模式,事件和委托如何与观察者模式协同工作。此外,它可能还会包含一些.NET框架下的设计模式,如依赖注入和面向服务架构。 通过学习...

    设计模式的几本书

    在面向对象设计原则的基础上,《Java设计模式》第二版还可能深入讨论Java语言特有的一些设计模式实现方式,如策略模式与Java枚举的结合使用,以及模板方法模式在异常处理中的应用。策略模式允许在一个类的行为中选择...

    设计模式C#版

    复习面向对象的三大特性:封装、继承和多态,是理解设计模式的基础。封装让对象的实现细节对外部隐藏,继承实现了代码的复用,多态则允许不同类的对象对同一消息做出响应。 二、设计模式举例 设计模式的种类很多,...

    界面设计模式 Designing Interfaces 2nd Edition

    《界面设计模式》(Designing Interfaces) 第二版是一本关于如何...总的来说,这本书通过提供一系列设计模式和用户行为的理解,为设计师提供了一条从基础到高级的设计学习路径,是界面和交互设计领域的重要参考书籍。

    设计模式精解-pdf.zip

    《设计模式精解》是一本深受读者喜爱的设计模式经典书籍,它为初学者和有经验的开发者提供了深入理解和应用设计模式的宝贵资源。设计模式是软件工程中的重要概念,它们是针对常见问题的经过验证的解决方案,可以在...

    java设计模式电子书

    理解设计模式之间的关系和相互作用也是至关重要的,例如,适配器模式可以和装饰器模式结合,以增强或修改已存在的类的行为。 在阅读这些书籍时,应重点关注每个模式的动机、结构、参与者、实现步骤以及优缺点。同时...

Global site tag (gtag.js) - Google Analytics