我的设计模式学习笔记------>Java设计模式总概况
设计模式(Design Pattern)的概念最早起源于建筑设计大师Alexander的《建筑的永恒方法》一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计领域。在《建筑的永恒方法》一书中是这样描述模式的:
模式是一条由三个部分组成的通用规则:他表示一个特定环境、一类问题和一个解决方案之间的关系。每一个模式描述了一个不断重复发生的问题,以及该问题解决方案的核心设计。
软件领域的设计模式也有类似的定义:设计模式是对处于特定环境下,经常出现的某类软件开发的问题的一种相对成熟的设计方案。
所有资深软件设计师,他们积累了足够的经验,这些经验可以让他们快速、优雅地解决软件设计开发中的大量重复问题。而设计模式的最终目的就是帮助人们利用软件设计师的集成经验,从而设计出更加优秀的软件。
当然,写此文只是记录本人学习设计模式过程中的一点感悟,希望对读者有所帮助。实际上,设计模式的理解必须建立以足够的代码积累量作为基础。
根据Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides几个软件设计模式的奠基人的说法(他们的著作就是《Design Patterns:Elements of Reusable Object-Oriented Software》,中文名是《设计模式:可复用面向对象软件的基础》),设计模式常常被分成如下三类:
创建型模式 :创建对象时,不再由我们直接实例化对象,而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能、更好的架构优势。
- 抽象工厂模式(AbstractFactory)
- 工厂方法模式(FactoryMethod)
- 单例模式(Singleton)
- 创建者模式(Builder)
- 原型模式(Prototype)
- 适配器模式(Adapter)
- 桥接模式(Bridge)
- 组合模式(Composite)
- 装饰模式(Decorator)
- 外观模式(Facade)
- 享元模式(Flyweight)
- 代理模式(Proxy)
- 责任链模式(Chain of Responsibility)
- 命令模式(Command)
- 解释器模式(Interpreter)
- 迭代器模式(Iterator)
- 中介者模式(Mediator)
- 备忘录模式(Memento)
- 状态模式(State)
- 策略模式(Strategy)
- 模板方法模式(TemplateMethod)
- 观察者模式(Observer)
- 访问者模式(Visitor)
下面看一张本人用思维导图软件做的设计模式的总概况图:
说实话设计模式不是一般的难:
- 第一难:需要你有真正的OO水平,有大量的编码及设计基础。
- 第二难:难以在工作中真正实践全部23种设计模式,无实践就无法真正理解。很少系统需要用到设计模式,或者只用到很少的一部分。我们这些软件开发人员,大部分都是在做数据库的CRUD的工作,设计模式难有用武之地。
- 第三难:学习资料要么太深奥难懂,要么就是太肤浅了。
- 第四难:你以为你懂了,其实你没懂!设计模式学习过程是迂回前进的。
- 第五难:找不到高手与你沟通!
设计模式绝对不是纸上谈兵的知识,关看书就以为自己懂了,那只是井底之蛙之见,设计模式绝对是从实践中来到实践中去的!
如果编码经验甚少,也不太可能能理解好设计模式,但凡软件设计能力强的人编码功底都是相当扎实的。
如果没有能深刻理解面向对象,也不太可能理解好设计模式。
按对设计模式的熟悉程度,我划分了一下几个档次:
- 不知道:没听说过,或者只知道名字。
- 能说:能简单说出该设计模式的用途。
- 能画:能准确地画出该设计模式的类图,或者画出实际应用的类图。
- 能写:能写出实现该设计模式的实例代码。
- 会用:能在实际工作中运用设计模式。
- 活用:很熟练,能在工作中创造性地应用设计模式,可以指导别人应用设计模式工作。
- 要用真正面向对象的语言来编程,这样会加速你对面向对象、设计模式的理解
- 找浅显的设计模式来学习:《Design Patterns:Elements of Reusable Object-Oriented Software》这本大作好是好,但是很难看得懂,《Head First 设计模式》容易入门,《研磨设计模式》也很不错。
- 在设计工作中多用类图:类图关看是远远不够的,要多多实践,通过类图来提高自身的OO能力。
- 多想具体的应用例子,并写出实例代码。
- 多提问,敢于挑战传统想法。
==================================================================================================
作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng
==================================================================================================
我的设计模式学习笔记------>Java设计模式总概况的更多相关文章
- [置顶] 我的设计模式学习笔记------>Java设计模式总概况
设计模式的概念最早起源于建筑设计大师Alexander的<建筑的永恒方法>一书,尽管Alexander的著作是针对建筑领域的,但是他的观点实际上用用于所有的工程设计领域,其中也包括软件设计 ...
- 设计模式学习笔记——java中常用的设计模式
单例设计模式(Singleton Pattern) 观察者模式(Observer Pattern) 工厂模式(Factory Pattern) 策略模式(Strategy Pattern) 适配器模式 ...
- Java设计模式学习笔记(一) 设计模式概述
前言 大约在一年前学习过一段时间的设计模式,但是当时自己的学习方式比较低效,也没有深刻的去理解.运用所学的知识. 所以现在准备系统的再重新学习一遍,写一个关于设计模式的系列博客. 废话不多说,正文开始 ...
- Java23种设计模式学习笔记【目录总贴】
创建型模式:关注对象的创建过程 1.单例模式:保证一个类只有一个实例,并且提供一个访问该实例的全局访问点 主要: 饿汉式(线程安全,调用效率高,但是不能延时加载) 懒汉式(线程安全,调用效率不高,但 ...
- 23种设计模式+J2EE设计模式学习笔记-初识设计模式
设计模式简介: 设计模式是一套被反复使用的.多数人知晓的.经过分类编目的.代码设计经验的总结.(个人理解:设计模式是不关乎业务,逻辑实现,针对普遍问题的一种解决方案). 设计模式的类型: 传统23种设 ...
- Java设计模式学习笔记(五) 单例模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 1. 使用单例模式的原因 以Windows任务管理器为例,在Windows系统中,任务管理器是唯 ...
- java设计模式学习笔记--接口隔离原则
接口隔离原则简述 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上 应用场景 如下UML图 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类 ...
- java设计模式学习笔记--单一职责原则
单一职责原则注意事项和细节 1.降低类的复杂度,一个类只负责一项职责 2.提高可读性,可维护性 3.降低变更引起的风险 4.通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单 ...
- java设计模式学习笔记--浅谈设计模式
设计模式的目的 编写软件的过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战.设计模式为了让程序具有更好的 1.代码重用性(即:相同功能的代码,不用多次编写) ...
随机推荐
- NetBean 远程开发的好文1 --> NetBeans的远程Linux C开发实践
from: http://blog.csdn.net/jacktan/article/details/9268535 一直以来总觉得NetBeans生活在Eclipse的阴影下,同样做为一款不错的基 ...
- Some perl tips
下面是日常工作中一些代码片段的总结,部分注释是后加的,采用了//这种形式,请勿套用. 1.取得用户输入print("Please input the date range:");$ ...
- Java 循环结构 - for, while 及 do...while
Java 循环结构 - for, while 及 do...while 顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构. Java中有三种主要的循环结构: whi ...
- 微信java开发之实现微信主动推送消息
1.拉取access_token2.拉取用户信息3.主动推送消息4.接口貌似要申请权限5.依赖httpclient4.2.3 和jackson 2.2.1 public class WeixinAPI ...
- rational rose画UML图
原文见:http://blog.csdn.net/cjr15233661143/article/details/8532997 UML是一种建模语言,是系统建模的标准.我们之所以建模是因为大规模的系统 ...
- Android下的Handler
coder是没必要重复造轮子的,写博客亦如此.因为工作忙,学的东西比较多,没法自己来写博客.自己想了个思路就是,把别人的技术精华拿过来,从简到难,慢慢学习.最后提炼,得到自己想学的东西即可,等有时间了 ...
- Maven的pom文件内容详细理解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 【LeetCode-面试算法经典-Java实现】【114-Flatten Binary Tree to Linked List(二叉树转单链表)】
[114-Flatten Binary Tree to Linked List(二叉树转单链表)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a bin ...
- torrent&BT百科
转自:百度百科 名词指代 Tracker:收集下载者信息的服务器,并将此信息提供给其他下载者,使下载者们相互连接起来,传输数据. 种子:指一个下载任务中所有文件都被某下载者完整的下载,此时下载者成为一 ...
- php7.0 出现 curl_setopt(): Disabling safe uploads is no longer supported in 报错!
项目换成php7.0,进行了测试,使用curl时,出现: curl_setopt(): Disabling safe uploads is no longer supported in xxx.定位到 ...