我的设计模式学习笔记------>Java设计模式总概况

简介: 设计模式(Design Pattern)的概念最早起源于建筑设计大师Alexander的《建筑的永恒方法》一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计领域。



设计模式(Design Pattern)的概念最早起源于建筑设计大师Alexander的《建筑的永恒方法》一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计领域。在《建筑的永恒方法》一书中是这样描述模式的:

模式是一条由三个部分组成的通用规则:他表示一个特定环境、一类问题和一个解决方案之间的关系。每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。

软件领域的设计模式也有类似的定义:设计模式是对处于特定环境下,经常出现的某类软件开发的问题的一种相对成熟的设计方案。

所有资深软件设计师,他们积累了足够的经验,这些经验可以让他们快速、优雅地解决软件设计开发中的大量重复问题。而设计模式的最终目的就是帮助人们利用软件设计师的集成经验,从而设计出更加优秀的软件。

当然,写此文只是记录本人学习设计模式过程中的一点感悟,希望对读者有所帮助。实际上,设计模式的理解必须建立以足够的代码积累量作为基础。

根据Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides几个软件设计模式的奠基人的说法(他们的著作就是《Design Patterns:Elements of Reusable Object-Oriented Software》,中文名是《设计模式:可复用面向对象软件的基础》),设计模式常常被分成如下三类:

 创建型模式 :创建对象时,不再由我们直接实例化对象,而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。

  1.       抽象工厂模式(AbstractFactory)
  2.       工厂方法模式(FactoryMethod)
  3.       单例模式(Singleton)
  4.       创建者模式(Builder)
  5.       原型模式(Prototype)
   结构性模式:用于帮助将多个对象组织成更大的结构。
  1.       适配器模式(Adapter)
  2.       桥接模式(Bridge)
  3.       组合模式(Composite)
  4.       装饰模式(Decorator)
  5.       外观模式(Facade)
  6.       享元模式(Flyweight)
  7.       代理模式(Proxy)
   行为型模式:用于帮助系统间各对象的通信,以及如何控制复杂系统中的流程。
  1.       责任链模式(Chain of Responsibility)
  2.       命令模式(Command)
  3.       解释器模式(Interpreter)
  4.       迭代器模式(Iterator)
  5.       中介者模式(Mediator)
  6.       备忘录模式(Memento)
  7.       状态模式(State)
  8.       策略模式(Strategy)
  9.       模板方法模式(TemplateMethod)
  10.       观察者模式(Observer)
  11.       访问者模式(Visitor)

下面看一张本人用思维导图软件做的设计模式的总概况图:

说实话设计模式不是一般的难:

  • 第一难:需要你有真正的OO水平,有大量的编码及设计基础。
  • 第二难:难以在工作中真正实践全部23种设计模式,无实践就无法真正理解。很少系统需要用到设计模式,或者只用到很少的一部分。我们这些软件开发人员,大部分都是在做数据库的CRUD的工作,设计模式难有用武之地。
  • 第三难:学习资料要么太深奥难懂,要么就是太肤浅了。
  • 第四难:你以为你懂了,其实你没懂!设计模式学习过程是迂回前进的。
  • 第五难:找不到高手与你沟通!

设计模式绝对不是纸上谈兵的知识,关看书就以为自己懂了,那只是井底之蛙之见,设计模式绝对是从实践中来到实践中去的!

如果编码经验甚少,也不太可能能理解好设计模式,但凡软件设计能力强的人编码功底都是相当扎实的。

如果没有能深刻理解面向对象,也不太可能理解好设计模式。


按对设计模式的熟悉程度,我划分了一下几个档次:

  1. 不知道:没听说过,或者只知道名字。
  2. 能说:能简单说出该设计模式的用途。
  3. 能画:能准确地画出该设计模式的类图,或者画出实际应用的类图。
  4. 能写:能写出实现该设计模式的实例代码。
  5. 会用:能在实际工作中运用设计模式。
  6. 活用:很熟练,能在工作中创造性地应用设计模式,可以指导别人应用设计模式工作。

如何学习设计模式?
  1. 要用真正面向对象的语言来编程,这样会加速你对面向对象、设计模式的理解
  2. 找浅显的设计模式来学习:《Design Patterns:Elements of Reusable Object-Oriented Software》这本大作好是好,但是很难看得懂,《Head First 设计模式》容易入门,《研磨设计模式》也很不错。
  3. 在设计工作中多用类图:类图关看是远远不够的,要多多实践,通过类图来提高自身的OO能力。
  4. 多想具体的应用例子,并写出实例代码。
  5. 多提问,敢于挑战传统想法。


==================================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址http://blog.csdn.net/ouyang_peng

==================================================================================================

相关文章
|
16天前
|
设计模式 监控 Java
设计模式 - 观察者模式(Observer):Java中的战术与策略
【4月更文挑战第7天】观察者模式是构建可维护、可扩展系统的关键,它在Java中通过`Observable`和`Observer`实现对象间一对多的依赖关系,常用于事件处理、数据绑定和同步。该模式支持事件驱动架构、数据同步和实时系统,但需注意避免循环依赖、控制通知粒度,并关注性能和内存泄漏问题。通过明确角色、使用抽象和管理观察者注册,可最大化其效果。
|
5天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
8天前
|
设计模式 算法 Java
小谈设计模式(30)—Java设计模式总结
小谈设计模式(30)—Java设计模式总结
|
9天前
|
设计模式 存储 Java
Java设计模式:解释一下单例模式(Singleton Pattern)。
`Singleton Pattern`是Java中的创建型设计模式,确保类只有一个实例并提供全局访问点。它通过私有化构造函数,用静态方法返回唯一的实例。类内静态变量存储此实例,对外仅通过静态方法访问。
15 1
|
13天前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
14 0
|
14天前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
26 4
|
16天前
|
设计模式 Java
23种设计模式,命令模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】命令模式是一种行为设计模式,它将请求或简单操作封装为一个对象。这种模式允许用户通过调用对象来参数化其他对象的方法,并能保存、排队和执行方法调用。
20 1
|
15天前
|
设计模式 SQL 算法
设计模式了解哪些,模版模式
设计模式了解哪些,模版模式
19 0
|
1月前
|
设计模式 Java uml
C++设计模式之 依赖注入模式探索
C++设计模式之 依赖注入模式探索
37 0
|
2月前
|
设计模式 前端开发 JavaScript
观察者模式 vs 发布-订阅模式:两种设计模式的对决!
欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚开始学习前端的读者们打造的。无论你是初学者还是有一些基础的开发者,我们都会在这里为你提供一个系统而又亲切的学习平台。我们以问答形式更新,为大家呈现精选的前端知识点和最佳实践。通过深入浅出的解释概念,并提供实际案例和练习,让你逐步建立起一个扎实的基础。无论是HTML、CSS、JavaScript还是最新的前端框架和工具,我们都将为你提供丰富的内容和实用技巧,帮助你更好地理解并运用前端开发中的各种技术。