模式汇总:
装饰者  :包装一个对象以得到新的行为
状态     :封装了基于状态的行为,并使用委托在行为之间切换
迭代器  :在对象的结合中游走,而不暴露集合的实现
外观     :简化一群类的接口
策略     :封装可以互换的行为,病史用委托类决定要使用哪一个
代理     :包装对象,以控制对此对象的访问
工厂方法   :由子类决定要创建的对象是哪一个
适配器    :封装对象,并提供不同的接口
观察者    :让对象能够在状态改变时被通知
模板方法   :由子类决定如何实现一个算法中的步骤
组合     :客户用一致的方式处理对象集合和单个对象
单例     :确保有且只有一个对象被创建
抽象工厂   :允许客户创建对象的家族,而无需指定他们的具体类
命令     :封装请求成为对象

用到的设计原则:

  • 封装变化
  • 多用组合少用继承
  • 针对接口编程,不针对实现编程
  • 松耦合
  • 开闭原则(类应该对扩展开放对修改关闭)
  • 依赖抽象,不依赖具体
  • 迪米特原则(只和朋友交谈)
  • 别找我,我会找你
  • 类应该只有一个改变的理由

模式分类:
创建型:Singleton,  Builder,   Abstract Factory,  Factory Method,  Prototype
行为型:Template Method,  Visitor,  Iterator,  Command,  Observer,  State,  Strategy
结构型:Decorator,  Proxy,  Composite,  Bridge,  Adapter,  Flyweight

我们使用设计模式的目的是为了让我们的代码更简单,让以后更容易扩展。使用设计的模式的时候,一定会比不使用设计的代码更复杂,因此,对于一些没必要使用设计模式的地方,就不要使用设计模式。像一些以后不会修改的地方,不会扩展的地方,直接写就可以了,不要增加冗余的代码来增加什么设计模式。一段有设计模式的代码更从其他人的角度来看更加难理解。在使用设计模式的时候一定权衡好,时刻记住一点,我们使用设计模式只是为了增加我们以后的扩展性。还有,在写完一段代码的时候,想想怎么可以重构一下简化代码,实际上,写程序的逻辑应该只是写完这段代码花的时间最少的一部分,更多的时间应该是整理代码,能重用的就重用。

写代码的时候记住那些设计原则就能帮助我们写出优秀的代码。

读后感:这篇文章是读完这本几天后写的,在一开始看的时候,肯定是看到哪个模式的时候已经把这个模式自我感觉看透了,但是现在在回头想想,能像一开始那样记住的并不剩几个了,给我的感觉其实并不必要去死记硬背一些什么模式改怎么写,主要在脑子里有一些设计模式的概念,在碰到问题的时候,先从脑子搜索一下哪个模式能解决类似的问题,到那时候在去找也可以,如果从设计原则出发开始思考问题,也许到时候不知不觉的就发现,原来这个地方我还用到了设计模式。所以,这本给我最大的收益就是让我记住了那些设计原则,在写代码的时候能先从设计原则出发思考问题。并没有强求硬要写什么模式,模式只是为了以后扩展方便,如果你都不知道哪个地方以后会扩展,那在第一次就写那么复杂的代码干什么,想让别人知道自己多NB?如果知道了这个地方以后一定会有扩展,那么,一定要想好用哪个设计模式,这种时候才是应该用设计模式的地方。这本书后面还面还有几个模式,这里也就不写了,抓住重点就可以了。

Head First 设计模式-- 总结的更多相关文章

  1. MVVM设计模式和WPF中的实现(四)事件绑定

    MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  2. java EE设计模式简介

    1.何为设计模式 设计模式提供了对常见应用设计问题的解决方案.在面向对象的编程中,设计模式通常在解决与对象创建和交互相关的问题,而非整体软件架构所面对的大规模问题,它们以样板代码的形式提供了通用的解决 ...

  3. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式

    上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...

  4. 《JavaScript设计模式 张》整理

    最近在研读另外一本关于设计模式的书<JavaScript设计模式>,这本书中描述了更多的设计模式. 一.创建型设计模式 包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单 ...

  5. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  6. 设计模式之行为类模式大PK

                                        行为类模式大PK 行为类模式包括责任链模式.命令模式.解释器模式.迭代器模式.中介者模式.备忘录模式.观察者模式.状态模式.策略 ...

  7. .NET设计模式访问者模式

    一.访问者模式的定义: 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 二.访问者模式的结构和角色: 1.Visitor 抽象访问者角色,为该 ...

  8. Java开发中的23种设计模式详解

    [放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...

  9. java 设计模式

    目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计 ...

  10. 设计模式之单例模式(Singleton)

    设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...

随机推荐

  1. django中文配置的问题

    language_code:'zh-hans' 生成的语言文件请使用zh_Hans,这样才能你的app和系统的app完全翻译成中文,掉此坑的请在下面留言

  2. javascript中正则表达式的基础语法

    × 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...

  3. ios safari 标签发送到桌面自定义图标方法

    iphone 修改safari 发送到桌面图标 试了几次,总结如下: 1.全屏方法 <meta name="viewport" content="width=dev ...

  4. C#语法糖,让编程更具乐趣

    一.什么是语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法 ...

  5. Dynamics AX 2012 R2 无法创建类"Excel.Application"的COM对象

        Reinhard在做一个Excel导入项目时,发现X++代码一旦执行到Excel组件部分,就会报如下错误: 无法创建类"Excel.Application"的COM对象.请 ...

  6. C#:注册组件

    注册flash 为例: 代码比较差 仅供学习参考 /// <summary> /// 注册组件 /// </summary> private static void Regis ...

  7. JavaScript 动态脚本

    动态脚本,指的是在页面加载时不存在,但将来的某一个时刻通过修改DOM动态添加的脚本. <script type="text/javascript"> function ...

  8. COUNT(1)和COUNT(*)区别

    项目经常用到count(1),但是和count(*)什么区别? 从下面实验结果来看,Count (*)和Count(1)查询结果是一样的,都包括对NULL的统计,而count(列名) 是不包括NULL ...

  9. 山东省第七届ACM省赛------The Binding of Isaac

    The Binding of Isaac Time Limit: 2000MS Memory limit: 65536K 题目描述 Ok, now I will introduce this game ...

  10. Topcoder SRM 683 Div2 - C

    树形Dp的题,根据题意建树. DP[i][0] 表示以i为根节点的树的包含i的时候的所有状态点数的总和 Dp[i][1] 表示包含i结点的状态数目 对于一个子节点v Dp[i][0] = (Dp[v] ...