设计模式是告诉我们如何组织类和对象以解决某种问题。

学习设计模式,也就是学习其他开发人员的经验与智慧,解决遇到的相同的问题。

使用模式的最好方式是:把模式装进脑子,然后在设计的时候,寻找何处可以使用它们。函数,方法是代码的复用,模式是经验的复用。

继承:超类的改变是会影响所有子类的,有时候让所有的子类都具有超类的行为是不恰当的,所以继承并不总是能很好的解决问题。

接口:java的接口是不具有实现代码的,所以继承接口是无法达到代码复用的

修改软件时,寻求用一种对既有代码影响最小的方式来修改软件,是我们的想要的需求。

设计原则一:找出应用中可能需要变化之处,把他们抽取出来并“封装”,不和那些不需要变化的代码混在一起。这样代码变化引起的不经意后果变少,系统将变得更有弹性。

这个简单是原则几乎是以后每个设计模式背后的精神所在----“系统中的某部分变化不会影响其他部分”

设计原则二:针对接口编程,而不是针对实现编程。即利用多态,程序针对超类型编程。实例的行为将在运行时动态的设定。

设计原则三:多用组合,少用继承。两个类的组合,能获得适当的组合行为,同时系统也具有很大的弹性。

学完以上三个原则,获得第一个设计模式:策略模式(定义了算法族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化独立于使用算法的客户)。

建立可维护的OO系统,要诀在于随时想到系统以后可能需要的变化以及应付变化的原则。

head first 设计模式第一章笔记的更多相关文章

  1. [head first 设计模式] 第一章 策略模式

    [head first 设计模式] 第一章 策略模式 让我们先从一个简单的鸭子模拟器开始讲起. 假设有个简单的鸭子模拟器,游戏中会出现各种鸭子,此系统的原始设计如下,设计了一个鸭子超类,并让各种鸭子继 ...

  2. 【php学习】PHP 入门经典第一章笔记

    第一章: php在线手册:http://php.net/manual/zh/index.php 在开始学习PHP之前,先来看一个合格的PHP程序员今后应具备哪些知识,这里只是笔者的一些总结,希望对读者 ...

  3. 《第一本docker书》- 第一章笔记

    环境: Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-30-generic i686) 第一章: 1 Docker客户端和服务器 2 Docker镜像 添加一个文件,执行一 ...

  4. javascript设计模式 第一章 灵活的javascript

    javascript 设计模式 第1章 灵活的语言--JavaScript 初级程序员接到一个验证表单功能的任务,需要验证用户名.邮箱.密码等 ** 此文章内容大部分来自 <javascript ...

  5. 路飞学城Python爬虫课第一章笔记

    前言 原创文章,转载引用务必注明链接.水平有限,如有疏漏,欢迎指正. 之前看阮一峰的博客文章,介绍到路飞学城爬虫课程限免,看了眼内容还不错,就兴冲冲报了名,99块钱满足以下条件会返还并送书送视频. 缴 ...

  6. AIX系统管理员--第一章笔记

    IBM产品系列 x系类为PC服务器-- e-server x        x表示x-architecture        可自由选择运行环境,windows.linux.unix等    p系类为 ...

  7. 《pyhton语言程序设计》_第一章笔记

    章1.62 (1).python区分大小写. (2).python忽略在符号#之后的同行的内容 (3).python和matlab很相似(个人感觉) (4).章节1.91: >>>i ...

  8. 深入Linux内核架构第一章笔记

    1. Linux是多任务系统, 支持并发执行若干进程,系统同时真正运行的进程数目不超过CPU的数量,因此内核会按照时间间隔在不同进程之间切换. 2.确定那个进程运行多长时间的过程称为调度. 3.内核启 ...

  9. Ruby on Rails Tutorial 第一章笔记

    搭建开发环境 作者介绍了 Cloud9\ Coding.net 这样的云端开发环境 安装 Rails 1. 新建 rails 应用 首先,调用 rails new 命令创建一个新的 Rails 应用, ...

随机推荐

  1. OptimalSolution(9)--其他问题(2)

    一.有关阶乘的两个问题 二.最大的leftMax与rightMax之差的绝对值 三.路径数组变为统计数组 四.一种字符串和数字的对应关系 五.1到n中1出现的次数 六.数字的英文表达和中文表达 七.分 ...

  2. 数组转换成List集合

    Element[] array = {new Element(1), new Element(2)};List<element> list = new ArrayList<eleme ...

  3. (四)Trigger

    在游戏物体上可以添加Trigger组件,它与unity的eventTrigger类似,但功能更复杂详细. 在游戏物体上田间Trigger,并通过add new event来添加相关功能,如下图所示,添 ...

  4. Dotween 应用

    dotween是做缓动比较简单实用的插件,下面就使用经验进行浅谈 1)通用方法:如下图官网截图所示,如果看不懂可以跳过,这是一个通用方法,前两个参数为委托类型,可以用lambda表达式,也可以直接写成 ...

  5. vue订阅者模式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 小白学 Python(15):基础数据结构(集合)(下)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  7. JNI技术实现--Java调C/C++

    废话不多说,首先我们来看Java调用C/C++步骤: 1.编写Java代码,在代码中使用native关键字标明该方法是调用本地库,不需要实现. 2.使用javah -jni 命令,生成对应的头文件,此 ...

  8. 上下文管理器及with的相关总结

    什么是上下文管理器 基本语法 with EXPR as VAR: BLOCK 概念 上下文表达式:with open('test.txt') as f: 上下文管理器:open('test.txt') ...

  9. postman发送json参数到后端controller报错415的解决方案

    警告 [http-nio-8080-exec-9] org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.l ...

  10. formdata,ajax提交数据

    var data = document.getElementById("#dataForm"); var formData = new FormData(data); var ac ...